github.com/xwi88/log4go@v0.0.6/config.go (about) 1 package log4go 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "log" 7 "os" 8 ) 9 10 // GlobalLevel global level 11 var GlobalLevel = DEBUG 12 13 const ( 14 WriterNameConsole = "console_writer" 15 WriterNameFile = "file_writer" 16 WriterNameKafka = "kafka_writer" 17 ) 18 19 // LogConfig log config 20 type LogConfig struct { 21 Level string `json:"level" mapstructure:"level"` 22 Debug bool `json:"debug" mapstructure:"debug"` // output log info or not for log4go 23 FullPath bool `json:"full_path" mapstructure:"full_path"` 24 ConsoleWriter ConsoleWriterOptions `json:"console_writer" mapstructure:"console_writer"` 25 FileWriter FileWriterOptions `json:"file_writer" mapstructure:"file_writer"` 26 KafKaWriter KafKaWriterOptions `json:"kafka_writer" mapstructure:"kafka_writer"` 27 } 28 29 // SetupLog setup log 30 func SetupLog(lc LogConfig) (err error) { 31 if !lc.Debug { 32 log.SetOutput(ioutil.Discard) 33 defer log.SetOutput(os.Stdout) 34 } 35 36 // global config 37 GlobalLevel = getLevel(lc.Level) 38 39 // writer enable 40 // 1. if not set level, use global level; 41 // 2. if set level, use min level 42 validGlobalMinLevel := EMERGENCY // default max level 43 validGlobalMinLevelBy := "global" 44 45 fileWriterLevelDefault := GlobalLevel 46 consoleWriterLevelDefault := GlobalLevel 47 kafkaWriterLevelDefault := GlobalLevel 48 49 if lc.ConsoleWriter.Enable { 50 consoleWriterLevelDefault = getLevelDefault(lc.ConsoleWriter.Level, GlobalLevel, WriterNameConsole) 51 validGlobalMinLevel = maxInt(consoleWriterLevelDefault, validGlobalMinLevel) 52 if validGlobalMinLevel == consoleWriterLevelDefault { 53 validGlobalMinLevelBy = WriterNameConsole 54 } 55 } 56 57 if lc.FileWriter.Enable { 58 fileWriterLevelDefault = getLevelDefault(lc.FileWriter.Level, GlobalLevel, WriterNameFile) 59 validGlobalMinLevel = maxInt(fileWriterLevelDefault, validGlobalMinLevel) 60 if validGlobalMinLevel == fileWriterLevelDefault { 61 validGlobalMinLevelBy = WriterNameFile 62 } 63 } 64 65 if lc.KafKaWriter.Enable { 66 kafkaWriterLevelDefault = getLevelDefault(lc.KafKaWriter.Level, GlobalLevel, WriterNameKafka) 67 validGlobalMinLevel = maxInt(kafkaWriterLevelDefault, validGlobalMinLevel) 68 if validGlobalMinLevel == kafkaWriterLevelDefault { 69 validGlobalMinLevelBy = WriterNameKafka 70 } 71 } 72 73 fullPath := lc.FullPath 74 WithFullPath(fullPath) 75 SetLevel(validGlobalMinLevel) 76 77 if lc.ConsoleWriter.Enable { 78 w := NewConsoleWriterWithOptions(lc.ConsoleWriter) 79 w.level = consoleWriterLevelDefault 80 log.Printf("[log4go] enable " + WriterNameConsole + " with level " + LevelFlags[consoleWriterLevelDefault]) 81 Register(w) 82 } 83 84 if lc.FileWriter.Enable { 85 w := NewFileWriterWithOptions(lc.FileWriter) 86 w.level = fileWriterLevelDefault 87 log.Printf("[log4go] enable " + WriterNameFile + " with level " + LevelFlags[fileWriterLevelDefault]) 88 Register(w) 89 } 90 91 if lc.KafKaWriter.Enable { 92 w := NewKafKaWriter(lc.KafKaWriter) 93 w.level = kafkaWriterLevelDefault 94 log.Printf("[log4go] enable " + WriterNameKafka + " with level " + LevelFlags[kafkaWriterLevelDefault]) 95 Register(w) 96 } 97 98 log.Printf("[log4go] valid global_level(min:%v, flag:%v, by:%v), default(%v, flag:%v)", 99 validGlobalMinLevel, LevelFlags[validGlobalMinLevel], validGlobalMinLevelBy, GlobalLevel, LevelFlags[GlobalLevel]) 100 return nil 101 } 102 103 // SetLogWithConf setup log with config file 104 func SetLogWithConf(file string) (err error) { 105 var lc LogConfig 106 cnt, err := ioutil.ReadFile(file) 107 108 if err = json.Unmarshal(cnt, &lc); err != nil { 109 return 110 } 111 return SetupLog(lc) 112 } 113 114 // SetLog setup log with config []byte 115 func SetLog(config []byte) (err error) { 116 var lc LogConfig 117 if err = json.Unmarshal(config, &lc); err != nil { 118 return 119 } 120 return SetupLog(lc) 121 } 122 123 func getLevel(flag string) int { 124 return getLevelDefault(flag, DEBUG, "") 125 } 126 127 // maxInt return max int 128 func maxInt(a, b int) int { 129 if a < b { 130 return b 131 } 132 return a 133 }