From b51b9142e212201e1d879d1ee0883176864995ac Mon Sep 17 00:00:00 2001 From: Oleksii Khliupin Date: Sat, 16 Mar 2019 10:42:44 -0400 Subject: [PATCH] SetLogger and panic stacktrace. (#210) * Initialize opencensus for GKE * update readme * Generalize initialization of sd exporter * fix sdExporterOptions * do not initilize SD exporters and error reporting unless we are in the cloud or set proper environment variables * Update doc * address comments * remove redundant if * SetLogger to context. Log panic with a stacktrace. * Func comment * fix typo * fix typo --- server/kit/kitserver.go | 5 +++-- server/kit/log.go | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/kit/kitserver.go b/server/kit/kitserver.go index a90bbbb09..b9e60082a 100644 --- a/server/kit/kitserver.go +++ b/server/kit/kitserver.go @@ -8,6 +8,7 @@ import ( "net" "net/http" "net/http/pprof" + "runtime/debug" "strings" "cloud.google.com/go/errorreporting" @@ -154,7 +155,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { err = e } - s.logger.Log("error", err, "message", "the server encountered a panic") + s.logger.Log("error", err, "message", "the server encountered a panic", "stacktrace", string(debug.Stack())) w.WriteHeader(http.StatusInternalServerError) _, werr := w.Write([]byte(http.StatusText(http.StatusInternalServerError))) @@ -191,7 +192,7 @@ func (s *Server) register(svc Service) { }), // inject the server logger into every request context httptransport.ServerBefore(func(ctx context.Context, _ *http.Request) context.Context { - return context.WithValue(ctx, logKey, AddLogKeyVals(ctx, s.logger)) + return SetLogger(ctx, AddLogKeyVals(ctx, s.logger)) }), } opts = append(opts, svc.HTTPOptions()...) diff --git a/server/kit/log.go b/server/kit/log.go index bc8753506..77e8e825f 100644 --- a/server/kit/log.go +++ b/server/kit/log.go @@ -37,6 +37,11 @@ func NewLogger(ctx context.Context, logID string) (log.Logger, func() error, err return lg, cl, err } +// SetLogger sets log.Logger to the context and returns new context with logger. +func SetLogger(ctx context.Context, logger log.Logger) context.Context { + return context.WithValue(ctx, logKey, logger) +} + // Logger will return a kit/log.Logger that has been injected into the context by the kit // server. This logger has had request headers and metadata added as key values. // This function will only work within the scope of a request initiated by the server.