Documentation
¶
Overview ¶
Package otellog adalah wrapper tipis di atas go-lib RunLogger yang otomatis menambahkan trace.id dan span.id ke setiap log entry, sekaligus mengirim log via OTEL Log SDK → Collector → Elasticsearch.
Index ¶
- Constants
- func Activity(ctx goravelhttp.Context, m golib.Map)
- func EnrichMap(ctx goravelhttp.Context, m map[string]any) map[string]any
- func Flush(ctx context.Context) error
- func GoContext(ctx goravelhttp.Context) context.Context
- func IsSensitiveKey(key string) bool
- func MaskJSON(body []byte, maxBytes int) string
- func MaskValue(v any) any
- func RegisterSensitiveKeys(keys ...string)
- func ServerMiddleware(opts ...MiddlewareOption) goravelhttp.Middleware
- func SetDBAttrs(ctx context.Context, statement string)
- func SetDBPaginateAttrs(ctx context.Context, statement string, page, limit int, rowsReturned int64)
- func TraceDB(ctx context.Context, table, operation string) (context.Context, func(*error))
- func TraceFunc(ctx context.Context, name string, fields ...golib.Map) (context.Context, func(*error))
- func WithRequestFields(ctx context.Context, fields golib.Map) context.Context
- type Logger
- type MiddlewareOption
Constants ¶
const MaskedValue = "***"
MaskedValue adalah pengganti nilai untuk field sensitif.
Variables ¶
This section is empty.
Functions ¶
func Activity ¶
func Activity(ctx goravelhttp.Context, m golib.Map)
Activity emits an HTTP activity log via OTEL SDK only (does not write to runtime.log). Use in middleware after calling Next() to capture full request/response with real trace.id.
func GoContext ¶
func GoContext(ctx goravelhttp.Context) context.Context
GoContext mengambil enriched Go context (dengan OTEL span) dari goravelhttp.Context. Gunakan di controller saat memanggil usecase agar trace menyambung. Fallback ke ctx.Context() jika OTEL belum di-set.
func IsSensitiveKey ¶ added in v1.1.10
IsSensitiveKey melaporkan apakah nilai dengan key ini harus di-mask.
func MaskJSON ¶ added in v1.1.10
MaskJSON mem-parse body JSON, me-mask field sensitif, lalu memotong hasilnya ke maxBytes (0 = tanpa batas). Body non-JSON dikembalikan apa adanya (terpotong), karena tidak bisa diidentifikasi field-nya.
func MaskValue ¶ added in v1.1.10
MaskValue mengembalikan salinan v dengan semua nilai ber-key sensitif diganti MaskedValue, rekursif ke map dan slice. Nilai asli tidak dimodifikasi.
func RegisterSensitiveKeys ¶ added in v1.1.10
func RegisterSensitiveKeys(keys ...string)
RegisterSensitiveKeys menambah key yang harus di-mask (pencocokan exact, setelah normalisasi). Panggil sekali saat boot service, mis. untuk field domain khusus: otellog.RegisterSensitiveKeys("namaIbuKandung", "noHp").
func ServerMiddleware ¶ added in v1.1.10
func ServerMiddleware(opts ...MiddlewareOption) goravelhttp.Middleware
ServerMiddleware menggantikan pasangan middleware OtelMetrics + OtelActivity dan startSpan di controller. Untuk setiap request ia:
- Extract traceparent dari header (bisa dimatikan, lihat WithTrustIncomingTrace)
- Membuat span SERVER dan menyimpannya ke context ("otelSpan", "otelContext"), sehingga otellog.Runtime / otellog.GoContext di controller langsung tersambung
- Mencatat HTTP metrics (total, durasi, active)
- Setelah handler selesai: set http.status_code, status Error untuk 5xx/panic, lalu kirim activity log dengan body yang sudah di-mask & dipotong
Pasang PALING AWAL, sebelum middleware bisnis (auth, PreRequest, dll.), supaya request yang ditolak middleware tersebut tetap punya trace:
facades.Route().Middleware(otellog.ServerMiddleware(), middleware.PreRequest).Group(...)
Di controller, nama span bisa diperjelas:
trace.SpanFromContext(otellog.GoContext(ctx)).SetName("OrderController.Create")
func SetDBAttrs ¶
SetDBAttrs menyimpan db.statement ke span aktif di ctx. Gunakan untuk INSERT, UPDATE, DELETE, atau single SELECT.
ctx, done := otellog.TraceDB(ctx, "mst_rekanan", "UPDATE")
defer done(&err)
otellog.SetDBAttrs(ctx, query.ToRawSql().Update("status", val))
func SetDBPaginateAttrs ¶
SetDBPaginateAttrs menyimpan db.statement + pagination + rows_returned ke span aktif di ctx. Panggil setelah Paginate selesai dengan stmt yang diambil sebelum eksekusi.
ctx, done := otellog.TraceDB(ctx, "mst_rekanan", "SELECT") defer done(&err) stmt := query.ToRawSql().Find(&list) _ = query.Paginate(page, limit, &list, &total) otellog.SetDBPaginateAttrs(ctx, stmt, page, limit, total)
func TraceDB ¶
TraceDB membuat DB span untuk operasi query di repository. Gunakan dengan named return error dan defer:
func (r *Repo) GetList(ctx context.Context, ...) (result []Model, err error) {
ctx, done := otellog.TraceDB(ctx, "nama_tabel", "SELECT")
defer done(&err)
...
}
func TraceFunc ¶
func TraceFunc(ctx context.Context, name string, fields ...golib.Map) (context.Context, func(*error))
TraceFunc membuat span + log error otomatis untuk satu fungsi. Gunakan dengan named return error dan defer:
func (u *Usecase) MyFunc(ctx context.Context, req Req) (resp Resp, err error) {
ctx, done := otellog.TraceFunc(ctx, "MyFunc", log.Map{"key": val})
defer done(&err)
...
}
fields opsional, tidak wajib diisi.
func WithRequestFields ¶
WithRequestFields menyimpan field request ke dalam Go context. Field ini otomatis di-merge ke setiap log call yang menggunakan context tersebut, tanpa perlu ditulis ulang di setiap Info/Warning/Error.
Types ¶
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
func Runtime ¶
func Runtime(ctx goravelhttp.Context) *Logger
Runtime — pakai di controller yang punya goravelhttp.Context. Otomatis mengambil enriched context (dengan request fields) jika sudah di-set oleh OtelPropagation atau OtelRequestFields middleware.
func RuntimeCtx ¶
RuntimeCtx — pakai di usecase/repository yang punya context.Context.
type MiddlewareOption ¶ added in v1.1.10
type MiddlewareOption func(*middlewareConfig)
MiddlewareOption mengatur perilaku ServerMiddleware.
func WithActivityLog ¶ added in v1.1.10
func WithActivityLog(enabled bool) MiddlewareOption
WithActivityLog menyalakan/mematikan activity log OTEL. Default true.
func WithMaxBodyBytes ¶ added in v1.1.10
func WithMaxBodyBytes(n int) MiddlewareOption
WithMaxBodyBytes batas ukuran requestBody/responseBody di activity log (setelah masking). Default 10000 byte.
func WithMetrics ¶ added in v1.1.10
func WithMetrics(enabled bool) MiddlewareOption
WithMetrics menyalakan/mematikan HTTP metrics (otelmetric.RecordHTTP). Default true.
func WithSkipPaths ¶ added in v1.1.10
func WithSkipPaths(paths ...string) MiddlewareOption
WithSkipPaths mengganti daftar path yang tidak di-trace/log/metric. Default: /ping, /favicon.ico.
func WithTrustIncomingTrace ¶ added in v1.1.10
func WithTrustIncomingTrace(trust bool) MiddlewareOption
WithTrustIncomingTrace menentukan apakah header traceparent/tracestate dari request masuk dipakai sebagai parent. Default true (service di belakang gateway). Set false di gateway/edge supaya client eksternal tidak bisa menyuntik trace ID dan keputusan sampling — gateway selalu jadi root span.