niki/logger/logger.go

59 lines
1.2 KiB
Go

package logger
import (
"io"
"log/slog"
"os"
"gopkg.in/natefinch/lumberjack.v2"
)
const (
defaultFilePath = "logs/logs.json"
defaultUseLocalTime = false
defaultFileMaxSizeInMB = 10
defaultFileAgeInDays = 30
)
type Config struct {
FilePath string
UseLocalTime bool
FileMaxSizeInMB int
FileMaxAgeInDays int
}
var l *slog.Logger
// init is default logger and Singleton that lets you ensure that a logger has only one instance, while providing a global access point to this instance.
func init() {
fileWriter := &lumberjack.Logger{
Filename: defaultFilePath,
LocalTime: defaultUseLocalTime,
MaxSize: defaultFileMaxSizeInMB,
MaxAge: defaultFileAgeInDays,
}
l = slog.New(
slog.NewJSONHandler(io.MultiWriter(fileWriter, os.Stdout), &slog.HandlerOptions{}),
)
}
func L() *slog.Logger {
return l
}
// New is constructor logger with special settings.
func New(cfg Config, opt *slog.HandlerOptions) *slog.Logger {
fileWriter := &lumberjack.Logger{
Filename: cfg.FilePath,
LocalTime: cfg.UseLocalTime,
MaxSize: cfg.FileMaxSizeInMB,
MaxAge: cfg.FileMaxAgeInDays,
}
logger := slog.New(
slog.NewJSONHandler(io.MultiWriter(fileWriter, os.Stdout), opt),
)
return logger
}