package logger import ( "bytes" "context" "encoding/json" "errors" "net/http" "time" ) var ( cfgSignoz SignozConfiguration ) // InitSignoz ... func InitSignoz(config SignozConfiguration) { cfgSignoz = config } // SendLogToSignoz ... func SendLogToSignoz(ctx context.Context, payload SignozLogPayload) error { if cfgSignoz.Logs.EndPoint == "" { return errors.New("end point not found") } client := http.Client{} b := generateBody(ctx, payload) r, errRequest := http.NewRequest(http.MethodPost, cfgSignoz.Logs.EndPoint, bytes.NewBuffer(b)) if errRequest != nil { return errRequest } r.Header.Set("Content-Type", "application/json") resp, errRequest := client.Do(r) if errRequest != nil { return errRequest } defer resp.Body.Close() return nil } func generateBody(ctx context.Context, info SignozLogPayload) []byte { var ( timestamp = time.Now().Unix() payload = logData{ SeverityNumber: info.SeverityLevel, SeverityText: getSeverityLevelText(info.SeverityLevel), Timestamp: timestamp, Source: cfgSignoz.ServiceName, Message: "", } ) body := map[string]interface{}{ "message": info.Message, "level_number": info.SeverityLevel, "level": getSeverityLevelText(info.SeverityLevel), "request_id": "", "data": info.Data, } rid := ctx.Value(CtxKeyRequestID) if rid != nil { body["request_id"] = rid.(string) payload.TraceID = rid.(string) payload.SpanID = rid.(string) } msg, _ := json.Marshal(body) payload.Message = string(msg) b, _ := json.Marshal(payload) return b } func getSeverityLevelText(level int) string { return MapStringSeverityLevel[level] }