mirror of
https://github.com/mgechev/revive.git
synced 2025-04-23 11:58:51 +02:00
38 lines
864 B
Go
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
|
|
}
|