44 "context"
55 "fmt"
66 "github.com/sirupsen/logrus"
7- "os "
7+ "gopkg.in/natefinch/lumberjack.v2 "
88 "path/filepath"
99 "time"
1010)
@@ -26,9 +26,9 @@ type Logger struct {
2626}
2727
2828type Config struct {
29- ModuleToFile map [string ]string
30- LogLevel LogLevel
31- LogFormat logrus.Formatter
29+ ModuleNameToLogFileDir map [string ]string
30+ LogLevel LogLevel
31+ LogFormat logrus.Formatter
3232}
3333
3434type TextVFormatter struct {}
@@ -42,48 +42,66 @@ func (f *TextVFormatter) Format(entry *logrus.Entry) ([]byte, error) {
4242 return []byte (log ), nil
4343}
4444
45- var ModuleToLoggers map [string ]* logrus.Logger
45+ var ModuleNameToLoggers map [string ]* logrus.Logger
4646var config Config
4747
4848func Initialize (cfg Config ) {
4949 config = cfg
50- ModuleToLoggers = make (map [string ]* logrus.Logger )
51-
52- for module , file := range config .ModuleToFile {
53- // setting log level
54- switch config .LogLevel {
55- case InfoLevel :
56- logrus .SetLevel (logrus .InfoLevel )
57- case WarnLevel :
58- logrus .SetLevel (logrus .WarnLevel )
59- case ErrorLevel :
60- logrus .SetLevel (logrus .ErrorLevel )
61- default :
62- logrus .SetLevel (logrus .InfoLevel )
63- }
64-
65- path := filepath .Dir (file )
66- if err := os .MkdirAll (path , os .ModePerm ); err != nil {
67- logrus .WithError (err ).Fatal ("cannot create log directory" )
68- }
69- logFile , err := os .OpenFile (file , os .O_CREATE | os .O_WRONLY | os .O_APPEND , 0666 )
70- if err != nil {
71- logrus .WithError (err ).Fatal ("cannot open log file" )
72- }
73-
74- // create logger instance for each module
75- logger := logrus .New ()
76- // setting module log output
77- logger .Out = logFile
78- logger .Formatter = config .LogFormat
79- ModuleToLoggers [module ] = logger
50+ ModuleNameToLoggers = make (map [string ]* logrus.Logger )
51+ setLogLevel ()
52+
53+ for moduleName , logFileDir := range config .ModuleNameToLogFileDir {
54+ logger := createLogger (moduleName , logFileDir , "info" )
55+ ModuleNameToLoggers [fmt .Sprintf ("%s_%v" , moduleName , "info" )] = logger
56+ logger = createLogger (moduleName , logFileDir , "error" )
57+ ModuleNameToLoggers [fmt .Sprintf ("%s_%v" , moduleName , "error" )] = logger
8058 }
8159}
8260
61+ func createLogger (moduleName , logFileDir , logLevel string ) * logrus.Logger {
62+ logFilePath := getLogFilePath (logFileDir , moduleName , logLevel )
63+ logger := logrus .New ()
64+ logger .Formatter = config .LogFormat
65+ logger .Out = & lumberjack.Logger {
66+ Filename : logFilePath ,
67+ MaxSize : 1024 ,
68+ MaxBackups : 5 ,
69+ MaxAge : 28 ,
70+ Compress : false ,
71+ LocalTime : true ,
72+ }
73+ return logger
74+ }
75+
76+ func setLogLevel () {
77+ switch config .LogLevel {
78+ case InfoLevel :
79+ logrus .SetLevel (logrus .InfoLevel )
80+ case WarnLevel :
81+ logrus .SetLevel (logrus .WarnLevel )
82+ case ErrorLevel :
83+ logrus .SetLevel (logrus .ErrorLevel )
84+ default :
85+ logrus .SetLevel (logrus .InfoLevel )
86+ }
87+ }
88+
89+ func getLogFilePath (logDir , moduleName , logLevel string ) string {
90+ fileName := fmt .Sprintf ("%s_%s.log" , moduleName , logLevel )
91+ return filepath .Join (logDir , fileName )
92+ }
93+
8394func New (moduleName string ) * Logger {
8495 return & Logger {
8596 moduleName : moduleName ,
86- logger : ModuleToLoggers [moduleName ].WithField ("" , "" ),
97+ logger : ModuleNameToLoggers [fmt .Sprintf ("%s_%v" , moduleName , "info" )].WithField (TraceID , "" ),
98+ }
99+ }
100+
101+ func NewError (moduleName string ) * Logger {
102+ return & Logger {
103+ moduleName : moduleName ,
104+ logger : ModuleNameToLoggers [fmt .Sprintf ("%s_%v" , moduleName , "error" )].WithField (TraceID , "" ),
87105 }
88106}
89107
@@ -94,7 +112,7 @@ func NewFromContext(ctx context.Context, moduleName string) *Logger {
94112 }
95113 return & Logger {
96114 moduleName : moduleName ,
97- logger : ModuleToLoggers [ moduleName ].WithField (TraceID , traceID ),
115+ logger : ModuleNameToLoggers [ fmt . Sprintf ( "%s_%v" , moduleName , "info" ) ].WithField (TraceID , traceID ),
98116 }
99117}
100118
@@ -108,4 +126,6 @@ func (l *Logger) Warn(fields Fields, message string) {
108126
109127func (l * Logger ) Error (fields Fields , message string ) {
110128 l .logger .WithFields (logrus .Fields (fields )).Error (message )
129+
130+ NewError (l .moduleName ).logger .WithFields (logrus .Fields (fields )).Error (message )
111131}
0 commit comments