From 3e9010b926f62a40fbf3e4d4da5fc0de349df8d5 Mon Sep 17 00:00:00 2001 From: "taisuke.fujita" Date: Thu, 10 Dec 2020 16:18:06 +0900 Subject: [PATCH] fix severity bug --- internal/logger/logger.go | 15 +++++++-------- internal/severity/severity.go | 17 +++++++++++++++++ logz_test.go | 13 ++++++------- middleware.go | 19 ++++++++++++++++++- trace.go | 7 +++++++ 5 files changed, 55 insertions(+), 16 deletions(-) diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 851d52c..e538964 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -15,13 +15,12 @@ import ( var NowFunc = time.Now type LogEntry struct { - Severity severity.Severity `json:"severity,string"` - Message string `json:"message"` - Time time.Time `json:"time"` - Trace string `json:"logging.googleapis.com/trace"` - SpanID string `json:"logging.googleapis.com/spanId"` - JSONPayload interface{} `json:"jsonPayload"` - HTTPRequest *HttpRequest `json:"httpRequest,omitempty"` + Severity string `json:"severity"` + Message string `json:"message"` + Time time.Time `json:"time"` + Trace string `json:"logging.googleapis.com/trace"` + SpanID string `json:"logging.googleapis.com/spanId"` + HTTPRequest *HttpRequest `json:"httpRequest,omitempty"` } type HttpRequest struct { @@ -48,7 +47,7 @@ func (l *Logger) WriteLog(ctx context.Context, severity severity.Severity, forma trace := fmt.Sprintf("projects/%s/traces/%s", config.ProjectID, sc.TraceID) msg := fmt.Sprintf(format, a...) ety := &LogEntry{ - Severity: severity, + Severity: severity.String(), Message: msg, Time: NowFunc(), Trace: trace, diff --git a/internal/severity/severity.go b/internal/severity/severity.go index 8e928c9..dceec6b 100644 --- a/internal/severity/severity.go +++ b/internal/severity/severity.go @@ -14,3 +14,20 @@ const ( Alert // 700 Emergency // 800 ) + +var severityMap = map[Severity]string{ + Default: "DEFAULT", + Debug: "DEBUG", + Info: "INFO", + Notice: "NOTICE", + Warning: "WARNING", + Error: "ERROR", + Critical: "CRITICAL", + Alert: "ALERT", + Emergency: "EMERGENCY", +} + +// String returns text representation for the severity +func (s Severity) String() string { + return severityMap[s] +} diff --git a/logz_test.go b/logz_test.go index 069785f..6196347 100644 --- a/logz_test.go +++ b/logz_test.go @@ -17,12 +17,11 @@ import ( Tests logz functions. The log format is below. { - "severity":"200", + "severity":"INFO", "message":"writes info log", "time":"2020-12-31T23:59:59.999999999+09:00", "logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000", - "logging.googleapis.com/spanId":"0000000000000000", - "jsonPayload":null + "logging.googleapis.com/spanId":"0000000000000000" } */ func TestLogz(t *testing.T) { @@ -56,7 +55,7 @@ func TestLogz(t *testing.T) { // Gets the log from buffer. got := strings.TrimRight(buf.String(), "\n") - expected := `{"severity":"200","message":"writes info log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000","jsonPayload":null}` + expected := `{"severity":"INFO","message":"writes info log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000"}` if diff := cmp.Diff(got, expected); diff != "" { // Restores the stdout @@ -83,7 +82,7 @@ func TestLogz(t *testing.T) { // Gets the log from buffer. got := strings.TrimRight(buf.String(), "\n") - expected := `{"severity":"400","message":"writes warning log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000","jsonPayload":null}` + expected := `{"severity":"WARNING","message":"writes warning log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000"}` if diff := cmp.Diff(got, expected); diff != "" { // Restores the stdout @@ -110,7 +109,7 @@ func TestLogz(t *testing.T) { // Gets the log from buffer. got := strings.TrimRight(buf.String(), "\n") - expected := `{"severity":"500","message":"writes error log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000","jsonPayload":null}` + expected := `{"severity":"ERROR","message":"writes error log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000"}` if diff := cmp.Diff(got, expected); diff != "" { // Restores the stdout @@ -137,7 +136,7 @@ func TestLogz(t *testing.T) { // Gets the log from buffer. got := strings.TrimRight(buf.String(), "\n") - expected := `{"severity":"600","message":"writes critical log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000","jsonPayload":null}` + expected := `{"severity":"CRITICAL","message":"writes critical log","time":"2020-12-31T23:59:59.999999999Z","logging.googleapis.com/trace":"projects/test/traces/00000000000000000000000000000000","logging.googleapis.com/spanId":"0000000000000000"}` if diff := cmp.Diff(got, expected); diff != "" { // Restores the stdout diff --git a/middleware.go b/middleware.go index 18193d8..03e688b 100644 --- a/middleware.go +++ b/middleware.go @@ -4,12 +4,29 @@ import ( "net/http" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" + "go.opentelemetry.io/otel" ) // HTTPMiddleware is middleware for HTTP handler -func HTTPMiddleware(label string) func(http.Handler) http.Handler { +func HTTPMiddleware2(label string) func(http.Handler) http.Handler { return func(h http.Handler) http.Handler { return otelhttp.NewHandler(h, label) } } + +func HTTPMiddleware(label string) func(http.Handler) http.Handler { + return func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + tracer := otel.Tracer("logz") + + prop := otel.GetTextMapPropagator() + ctx := prop.Extract(r.Context(), r.Header) + + newCtx, span := tracer.Start(ctx, r.URL.String()) + defer span.End() + + h.ServeHTTP(w, r.WithContext(newCtx)) + }) + } +} diff --git a/trace.go b/trace.go index 8fc5d34..a6dd2d7 100644 --- a/trace.go +++ b/trace.go @@ -12,6 +12,13 @@ import ( logzpropagation "github.com/glassonion1/logz/propagation" ) +func InitTracer() error { + tp := sdktrace.NewTracerProvider() + otel.SetTracerProvider(tp) + otel.SetTextMapPropagator(logzpropagation.HTTPFormat{}) + return nil +} + // InitStdoutTracer initializes tracer of OpenTelemetry, that is for stdout func InitStdoutTracer() error { // Create stdout exporter to be able to retrieve