2025-05-17 11:36:26 -04:00

66 lines
1.4 KiB
Go

package logging
import (
"fmt"
"log"
"os"
"path/filepath"
"gopkg.in/natefinch/lumberjack.v2"
)
// LogConfig contiene la configuración para el sistema de logs
type LogConfig struct {
BaseDir string
BaseFilename string
MaxSize int
MaxBackups int
MaxAge int
Compress bool
}
// LoggerSystem maneja los loggers de la aplicación
type LoggerSystem struct {
Writer *lumberjack.Logger
InfoLogger *log.Logger
ErrorLogger *log.Logger
}
// Referencias a loggers globales
var (
InfoLogger *log.Logger
ErrorLogger *log.Logger
)
// NewLoggerSystem crea un nuevo sistema de logs
func NewLoggerSystem(config *LogConfig) (*LoggerSystem, error) {
// Asegurarse de que el directorio base existe
if err := os.MkdirAll(config.BaseDir, 0755); err != nil {
return nil, fmt.Errorf("error creando directorio de logs: %w", err)
}
logPath := filepath.Join(config.BaseDir, config.BaseFilename)
logWriter := &lumberjack.Logger{
Filename: logPath,
MaxSize: config.MaxSize,
MaxBackups: config.MaxBackups,
MaxAge: config.MaxAge,
Compress: config.Compress,
LocalTime: true,
}
system := &LoggerSystem{
Writer: logWriter,
InfoLogger: log.New(logWriter, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile),
ErrorLogger: log.New(logWriter, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile),
}
return system, nil
}
// Close cierra el sistema de logs
func (ls *LoggerSystem) Close() error {
return ls.Writer.Close()
}