@@ -5,33 +5,46 @@ import (
55 "github.com/rs/zerolog"
66 "io"
77 "os"
8+ "strings"
89 "time"
910)
1011
1112var Logger * zerolog.Logger
1213
13- func NewLogger (env string ) (zerolog.Logger , error ) {
14+ func NewLogger (env string , logLevel string ) (zerolog.Logger , error ) {
1415 var output io.Writer
1516
1617 switch env {
1718 case "DEVELOPMENT" :
18- // Use a human-readable console writer for development
1919 output = zerolog.ConsoleWriter {
2020 Out : os .Stderr ,
2121 TimeFormat : time .RFC3339 ,
2222 }
2323 case "PRODUCTION" :
24- // Use JSON output for production, which is machine-readable
25- // and can be easily consumed by log aggregation systems.
26- file , err := os .OpenFile ("prod.log" , os .O_CREATE | os .O_APPEND | os .O_WRONLY , 0666 )
27- if err != nil {
28- return zerolog.Logger {}, err
29- }
30- output = file
24+ output = os .Stderr // For production, output to stderr by default. Consider file or other sink for actual deployments.
3125 default :
3226 return zerolog.Logger {}, fmt .Errorf ("invalid environment for logger setup: %s (Allowed: DEVELOPMENT, PRODUCTION)" , env )
3327 }
3428
3529 logger := zerolog .New (output ).With ().Timestamp ().Logger ()
30+
31+ // Set global log level
32+ switch strings .ToLower (logLevel ) {
33+ case "debug" :
34+ zerolog .SetGlobalLevel (zerolog .DebugLevel )
35+ case "info" :
36+ zerolog .SetGlobalLevel (zerolog .InfoLevel )
37+ case "warn" :
38+ zerolog .SetGlobalLevel (zerolog .WarnLevel )
39+ case "error" :
40+ zerolog .SetGlobalLevel (zerolog .ErrorLevel )
41+ case "fatal" :
42+ zerolog .SetGlobalLevel (zerolog .FatalLevel )
43+ case "panic" :
44+ zerolog .SetGlobalLevel (zerolog .PanicLevel )
45+ default :
46+ zerolog .SetGlobalLevel (zerolog .InfoLevel ) // Default to info level
47+ }
48+
3649 return logger , nil
3750}
0 commit comments