Pada artikel sebelumnya kita telah mengintegrasikan django framework dan sentry.io, sentry.io juga mendukung banyak bahasa program termasuk bahasa Go. Midleware yang akan kita gunakan untuk terintegrasi dengan sentry.io yaitu RAVEN.

Sekarang mari kita menuju pada pokok bahasan tentang apa saja yang bisa dilakukan sentry di bahas Go ?

Capturing Panics

sentry menyediakan dua cara untuk recovering panics, pengertian dan sample tentang panics kamu bisa membacanya di sini defer, panic and recover. Yaitu RecoverWithContext() dan Recover(), perhatikan contoh dibawah ini :

func bar() int {
	var luckyNumber []int
	return luckyNumber[42]
}
 
func foo() int {
	return bar()
}
 
func main() {
	// Initialize Sentry here
 
	defer sentry.Flush(time.Second * 5)
	defer sentry.Recover()
 
	foo()
}

Secara default, sentry-go menggunakan transport asinkron, yang membutuhkan sinyal eksplisit untuk penyelesaian pengiriman event menggunakan metode sentry.Flush. Jika tidak, program tidak akan menunggu panggilan HTTP async untuk mengembalikan respons dan segera keluar dari proses ketika mencapai akhir fungsi utama, sentry.Flush tidak diperlukan di dalam goroutine yang berjalan.

Capturing Errors

Pelaporan error di Go cukup mudah, karena di Go, “kesalahan hanyalah sebuah value.”, untuk lebih jelas tentang cara Go mengirim pesan error ke sentry ikuti artikel ini sampai selesai dan pelajari source codenya.

Pastikan sebelumnya kamu sudah memilki account dan membuat sample project di sentry.io, jika belum lakukan registrasi terlebih dahulu. Di tutorial kali ini kita akan membuat sebuah sample project untuk melihat data user pada database mysql. Sebelum kita memulai, mari kita buat terlebih dahulu struktur project impian kita, perhatikan gambar di bawah ini :

 

capture error golang dan sentry.io

library apa saja yang perlu kita siapkan ?

  • Raven : https://github.com/getsentry/raven-go
  • Gin : https://github.com/gin-gonic/gin
  • Gorm : https://github.com/jinzhu/gorm

Step1,  buat sebuah function yang akan kita simpan kedalam file sentrylog.go, perhatikan kode dibawah ini :

package sentrylog
 
import (
	"fmt"
	"log"
	"os"
 
	"github.com/getsentry/raven-go"
)
 
type Logging struct {
	Log *log.Logger
}
 
func New(logger *log.Logger) *Logging {
	return new(Logging).init(logger)
}
 
func (l *Logging) init(logger *log.Logger) *Logging {
	l.Log = logger
	raven.SetDSN(os.Getenv("SENTRY_DSN"))
	return l
}
 
// Info log info
func (l *Logging) Info(req ...interface{}) {
	fmt.Println(req...)
}
 
// Error log info
func (l *Logging) Error(req ...interface{}) {
	err := fmt.Errorf(fmt.Sprintf("%v", req))
	raven.CaptureErrorAndWait(err, nil)
	fmt.Println(req...)
	return
}
 
func (l *Logging) ErrorWithExtra(err error, extra map[string]interface{}) {
	raven.CaptureError(raven.WrapWithExtra(err, extra), nil)
	fmt.Println(extra)
	return
}

Step2, buat function untuk menyimpan koneksi database ke database mysql dan simpan di file connection.go, perhatikan kode di bawah ini :

package config
 
import (
	"fmt"
	"log"
	"os"
 
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)
 
func InitDB() *gorm.DB {
	var err error
	dsn := fmt.Sprintf(
		"%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true",
		os.Getenv("MYSQL_USERNAME"),
		os.Getenv("MYSQL_PASSWORD"),
		os.Getenv("MYSQL_HOST"),
		os.Getenv("MYSQL_PORT"),
		os.Getenv("DATABASE_NAME"),
	)
	db, errOpen := gorm.Open("mysql", dsn)
	if errOpen != nil {
		log.Fatal(errOpen.Error())
	}
	db.SingularTable(true)
 
	err = db.DB().Ping()
 
	if err != nil {
		log.Panic(err)
		fmt.Print(err.Error())
	} else {
		fmt.Printf("Successfully connected to MySQL")
	}
	db.DB().SetMaxIdleConns(60)
	//db.LogMode(true)
	//db.DB().SetMaxOpenConns(80)
 
	return db
}

Untuk lebih memahami project sample ini, Download Full Source, kemudian jalankan dengan cara

go run main.go local

kemudian buka browser dan jalankan kode dibawah ini

http://localhost:8090/api/users/

jika semua berjalan baik, kamu akan menemukan error logs pada project sentry yang kamu buat seperti di bawah ini :

screen capture golang sentry

baca artikel lainya :

Note: jika ada pertanyaan seputar artikel ini, silahkan kirim pertanyaan ke halovinaofficial@gmail.com, atau kamu bisa kontak langsung penulis.

link video tutorial : https://youtu.be/Vb0EOgek_FI