diff options
author | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-08-02 22:23:13 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-08-02 23:02:30 +0530 |
commit | 178e0bfc2d8709ae4d3abd7519b260df09b2d3b5 (patch) | |
tree | 10cbdd013c62586190074d9f088e2269f88c4cab /logging | |
parent | Fixed Broken .gitignore (diff) | |
download | gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar.gz gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar.bz2 gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar.lz gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar.xz gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.tar.zst gopkgserver-178e0bfc2d8709ae4d3abd7519b260df09b2d3b5.zip |
Diffstat (limited to 'logging')
-rw-r--r-- | logging/handler/handler.go | 75 | ||||
-rw-r--r-- | logging/log.go | 56 |
2 files changed, 0 insertions, 131 deletions
diff --git a/logging/handler/handler.go b/logging/handler/handler.go deleted file mode 100644 index 1501715..0000000 --- a/logging/handler/handler.go +++ /dev/null @@ -1,75 +0,0 @@ -package handler - -import ( - "go-pkg-server/logging" - "log/slog" - "net/http" - "time" -) - -type traceWriter struct { - http.ResponseWriter - status int - bytes int -} - -var _ http.ResponseWriter = &traceWriter{} - -func (t *traceWriter) Write(b []byte) (int, error) { - if t.status == 0 { - t.WriteHeader(http.StatusOK) - } - c, err := t.ResponseWriter.Write(b) - t.bytes += c - return c, err -} - -func (tw *traceWriter) WriteHeader(statusCode int) { - if tw.status == 0 { - tw.status = http.StatusOK - } - tw.status = statusCode - tw.ResponseWriter.WriteHeader(statusCode) -} - -func New(next http.Handler) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - logger := logging.FromContext(ctx) - - defer func() { - err := recover() - if err != nil { - logging.RecoverLog(ctx, err) - http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) - } - }() - - logger = logger.With("method", r.Method, - "host", r.Host, - "remote_address", r.RemoteAddr, - "path", r.RequestURI, - ) - - ctx = logging.WithLogger(ctx, logger) - - r = r.WithContext(ctx) - - tw := &traceWriter{ResponseWriter: w} - - start := time.Now() - next.ServeHTTP(tw, r) - duration := time.Since(start) - - logger.Log(ctx, slog.LevelInfo, "Request Handled", - "protocol", r.Proto, - "bytes_recieved", r.ContentLength, - "status", tw.status, - "time", duration, - "bytes_sent", tw.bytes, - "user_agent", r.UserAgent(), - "referer", r.Referer(), - ) - - } -} diff --git a/logging/log.go b/logging/log.go deleted file mode 100644 index 8e3078f..0000000 --- a/logging/log.go +++ /dev/null @@ -1,56 +0,0 @@ -package logging - -import ( - "context" - "io" - "log/slog" - "os" - "runtime" -) - -type Config struct { - Level slog.Level `toml:"level"` - File string `toml:"file"` -} - -func SetupLogger(cfg Config) *slog.Logger { - opts := &slog.HandlerOptions{Level: cfg.Level} - var handler slog.Handler - - var writter io.Writer - writter = os.Stdout - if cfg.File != "" { - f, _ := os.OpenFile(cfg.File, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - writter = f - } - handler = slog.NewJSONHandler(writter, opts) - - logger := slog.New(handler) - slog.SetDefault(logger) - return logger -} - -type contextKeyType struct{} - -var contextKey contextKeyType - -func WithLogger(ctx context.Context, logger *slog.Logger) context.Context { - return context.WithValue(ctx, contextKey, logger) -} - -func FromContext(ctx context.Context) *slog.Logger { - if logger, ok := ctx.Value(contextKey).(*slog.Logger); ok { - return logger - } - return slog.Default() -} - -func RecoverLog(ctx context.Context, err any) { - logger := FromContext(ctx) - - const size = 64 << 10 - buf := make([]byte, size) - buf = buf[:runtime.Stack(buf, false)] - - logger.Log(ctx, slog.LevelError, "Program Paniced", "error", err, "stack", string(buf)) -} |