aboutsummaryrefslogtreecommitdiff
path: root/internal/cli/logger.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2023-09-24 16:32:09 -0700
committerGravatar Frédéric Guillot <f@miniflux.net> 2023-09-24 22:37:33 -0700
commitc0e954f19d707fef8ef8271636ec661634a4c4c7 (patch)
tree5aa052a048f470e233a454e5ad9071eed1fa37c0 /internal/cli/logger.go
parent54cb8fa0286e4a2f1a81c32b5a89722d93b30bf7 (diff)
downloadv2-c0e954f19d707fef8ef8271636ec661634a4c4c7.tar.gz
v2-c0e954f19d707fef8ef8271636ec661634a4c4c7.tar.zst
v2-c0e954f19d707fef8ef8271636ec661634a4c4c7.zip
Implement structured logging using log/slog package
Diffstat (limited to 'internal/cli/logger.go')
-rw-r--r--internal/cli/logger.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/internal/cli/logger.go b/internal/cli/logger.go
new file mode 100644
index 00000000..4c4f08d3
--- /dev/null
+++ b/internal/cli/logger.go
@@ -0,0 +1,46 @@
+// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package cli // import "miniflux.app/v2/internal/cli"
+
+import (
+ "io"
+ "log/slog"
+)
+
+func InitializeDefaultLogger(logLevel string, logFile io.Writer, logFormat string, logTime bool) error {
+ var programLogLevel = new(slog.LevelVar)
+ switch logLevel {
+ case "debug":
+ programLogLevel.Set(slog.LevelDebug)
+ case "info":
+ programLogLevel.Set(slog.LevelInfo)
+ case "warning":
+ programLogLevel.Set(slog.LevelWarn)
+ case "error":
+ programLogLevel.Set(slog.LevelError)
+ }
+
+ logHandlerOptions := &slog.HandlerOptions{Level: programLogLevel}
+ if !logTime {
+ logHandlerOptions.ReplaceAttr = func(groups []string, a slog.Attr) slog.Attr {
+ if a.Key == slog.TimeKey {
+ return slog.Attr{}
+ }
+
+ return a
+ }
+ }
+
+ var logger *slog.Logger
+ switch logFormat {
+ case "json":
+ logger = slog.New(slog.NewJSONHandler(logFile, logHandlerOptions))
+ default:
+ logger = slog.New(slog.NewTextHandler(logFile, logHandlerOptions))
+ }
+
+ slog.SetDefault(logger)
+
+ return nil
+}