in src/ulsp/internal/core/logger.go [31:78]
func NewSugaredLogger(provider config.Provider) (*zap.SugaredLogger, error) {
var loggingConfig LoggingConfig
// Get logging configuration from the provider
if err := provider.Get("logging").Populate(&loggingConfig); err != nil {
return nil, err
}
// Parse the log level
level, err := zapcore.ParseLevel(loggingConfig.Level)
if err != nil {
return nil, err
}
// Create encoder config
encoderConfig := zap.NewProductionEncoderConfig()
if loggingConfig.Development {
encoderConfig = zap.NewDevelopmentEncoderConfig()
}
// Create the encoder based on the configuration
var encoder zapcore.Encoder
switch loggingConfig.Encoding {
case "json":
encoder = zapcore.NewJSONEncoder(encoderConfig)
case "console":
encoder = zapcore.NewConsoleEncoder(encoderConfig)
default:
encoder = zapcore.NewJSONEncoder(encoderConfig)
}
// Create the core
core := zapcore.NewCore(
encoder,
zapcore.AddSync(os.Stdout), // Default to stdout, can be enhanced to support multiple outputs
level,
)
// Create the logger
var logger *zap.Logger
if loggingConfig.Development {
logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
} else {
logger = zap.New(core)
}
return logger.Sugar(), nil
}