diff options
author | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-07-27 15:43:06 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2025-07-27 15:43:06 +0530 |
commit | 41178f6bad1f2e1eaed462475cb7aa26185dc0ac (patch) | |
tree | 8c025140c6d1d35d02246ea413b135da93021532 /logging/log.go | |
download | gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar.gz gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar.bz2 gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar.lz gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar.xz gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.tar.zst gopkgserver-41178f6bad1f2e1eaed462475cb7aa26185dc0ac.zip |
Initial Commit
Diffstat (limited to 'logging/log.go')
-rw-r--r-- | logging/log.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/logging/log.go b/logging/log.go new file mode 100644 index 0000000..8e3078f --- /dev/null +++ b/logging/log.go @@ -0,0 +1,56 @@ +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)) +} |