aboutsummaryrefslogtreecommitdiffstats
path: root/logging
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--logging/handler/handler.go75
-rw-r--r--logging/log.go56
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))
-}