1
0
mirror of https://github.com/mgechev/revive.git synced 2025-04-23 11:58:51 +02:00
revive/logging/logger.go
Oleksandr Redko 561c949334
change: replace log with log/slog for logging (#1280)
* change: replace log with log/slog for logging
* add TODO about slog.DiscardHandler
2025-03-25 09:47:59 -07:00

38 lines
864 B
Go

// Package logging provides a logger and related methods.
package logging
import (
"io"
"log/slog"
"os"
)
const logFile = "revive.log"
var logger *slog.Logger
// GetLogger retrieves an instance of an application logger which outputs
// to a file if the debug flag is enabled
func GetLogger() (*slog.Logger, error) {
if logger != nil {
return logger, nil
}
debugModeEnabled := os.Getenv("DEBUG") != ""
if !debugModeEnabled {
// by default, suppress all logging output
return slog.New(slog.NewTextHandler(io.Discard, nil)), nil // TODO: change to slog.New(slog.DiscardHandler) when we switch to Go 1.24
}
fileWriter, err := os.Create(logFile)
if err != nil {
return nil, err
}
logger = slog.New(slog.NewTextHandler(io.MultiWriter(os.Stderr, fileWriter), nil))
logger.Info("Logger initialized", "logFile", logFile)
return logger, nil
}