Files
locust-operator/internal/logging/logging.go
Chris Richardson 7bf1eae772
Some checks failed
Lint / Run on Ubuntu (push) Failing after 1m14s
Tests / Run on Ubuntu (push) Successful in 1m23s
Build images / Build docker image (push) Successful in 3m15s
comment out
2025-07-03 18:47:34 -04:00

50 lines
1.3 KiB
Go

package logging
import (
"log"
"os"
"github.com/go-logr/logr"
"github.com/go-logr/zapr"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
// CreateFileLogger Create a logger that will write to console, and file along with log rotation
func CreateFileLogger(fileName string, logLevel zapcore.LevelEnabler) logr.Logger {
// Create file with desired permissions
file, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer func() {
if cerr := file.Close(); cerr != nil && err == nil {
err = cerr
}
}()
config := zap.NewDevelopmentEncoderConfig()
config.EncodeTime = zapcore.ISO8601TimeEncoder
fileEncoder := zapcore.NewJSONEncoder(config)
consoleEncoder := zapcore.NewConsoleEncoder(config)
writer := zapcore.AddSync(&lumberjack.Logger{
Filename: fileName,
MaxSize: 1000, // MB
MaxBackups: 3,
MaxAge: 90, // days
Compress: false,
})
core := zapcore.NewTee(
zapcore.NewCore(fileEncoder, writer, logLevel),
zapcore.NewCore(fileEncoder, zapcore.AddSync(os.Stdout), logLevel),
zapcore.NewCore(fileEncoder, zapcore.AddSync(os.Stderr), logLevel),
zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), logLevel),
)
logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
return zapr.NewLogger(logger)
}