github.com/TIBCOSoftware/flogo-lib@v0.5.9/logger/logfactory.go (about) 1 package logger 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 "sync" 8 9 "github.com/TIBCOSoftware/flogo-lib/config" 10 "github.com/sirupsen/logrus" 11 ) 12 13 var loggerMap = make(map[string]Logger) 14 var mutex = &sync.RWMutex{} 15 var logLevel = InfoLevel 16 var logFormat = "TEXT" 17 18 type DefaultLoggerFactory struct { 19 } 20 21 func init() { 22 23 logFormat = config.GetLogFormat() 24 25 envLoggerImpl := os.Getenv("FLOGO_LOGGER_IMPL") 26 27 logLevelName := config.GetLogLevel() 28 // Get log level for name 29 getLogLevel, err := GetLevelForName(logLevelName) 30 if err != nil { 31 println("Unsupported Log Level - [" + logLevelName + "]. Set to Log Level - [" + defaultLogLevel + "]") 32 } else { 33 logLevel = getLogLevel 34 } 35 36 if strings.EqualFold(envLoggerImpl, "zap") { 37 initRootLogger() 38 RegisterLoggerFactory(&ZapLoggerFactory{}) 39 rootLogger.SetLogLevel(logLevel) 40 } else { 41 RegisterLoggerFactory(&DefaultLoggerFactory{}) 42 } 43 defaultLogger = getDefaultLogger() 44 } 45 46 type DefaultLogger struct { 47 loggerName string 48 loggerImpl *logrus.Logger 49 } 50 51 type LogFormatter struct { 52 loggerName string 53 } 54 55 func (f *LogFormatter) Format(entry *logrus.Entry) ([]byte, error) { 56 logEntry := fmt.Sprintf("%s %-6s [%s] - %s\n", entry.Time.Format(config.GetLogDateTimeFormat()), getLevel(entry.Level), f.loggerName, entry.Message) 57 return []byte(logEntry), nil 58 } 59 60 func getLevel(level logrus.Level) string { 61 switch level { 62 case logrus.DebugLevel: 63 return "DEBUG" 64 case logrus.InfoLevel: 65 return "INFO" 66 case logrus.ErrorLevel: 67 return "ERROR" 68 case logrus.WarnLevel: 69 return "WARN" 70 case logrus.PanicLevel: 71 return "PANIC" 72 case logrus.FatalLevel: 73 return "FATAL" 74 } 75 76 return "UNKNOWN" 77 } 78 79 // Debug logs message at Debug level. 80 func (l *DefaultLogger) Debug(args ...interface{}) { 81 l.loggerImpl.Debug(args...) 82 } 83 84 // DebugEnabled checks if Debug level is enabled. 85 func (l *DefaultLogger) DebugEnabled() bool { 86 return l.loggerImpl.Level >= logrus.DebugLevel 87 } 88 89 // Info logs message at Info level. 90 func (l *DefaultLogger) Info(args ...interface{}) { 91 l.loggerImpl.Info(args...) 92 } 93 94 // InfoEnabled checks if Info level is enabled. 95 func (l *DefaultLogger) InfoEnabled() bool { 96 return l.loggerImpl.Level >= logrus.InfoLevel 97 } 98 99 // Warn logs message at Warning level. 100 func (l *DefaultLogger) Warn(args ...interface{}) { 101 l.loggerImpl.Warn(args...) 102 } 103 104 // WarnEnabled checks if Warning level is enabled. 105 func (l *DefaultLogger) WarnEnabled() bool { 106 return l.loggerImpl.Level >= logrus.WarnLevel 107 } 108 109 // Error logs message at Error level. 110 func (l *DefaultLogger) Error(args ...interface{}) { 111 l.loggerImpl.Error(args...) 112 } 113 114 // ErrorEnabled checks if Error level is enabled. 115 func (l *DefaultLogger) ErrorEnabled() bool { 116 return l.loggerImpl.Level >= logrus.ErrorLevel 117 } 118 119 // Debug logs message at Debug level. 120 func (l *DefaultLogger) Debugf(format string, args ...interface{}) { 121 l.loggerImpl.Debugf(format, args...) 122 } 123 124 // Info logs message at Info level. 125 func (l *DefaultLogger) Infof(format string, args ...interface{}) { 126 l.loggerImpl.Infof(format, args...) 127 } 128 129 // Warn logs message at Warning level. 130 func (l *DefaultLogger) Warnf(format string, args ...interface{}) { 131 l.loggerImpl.Warnf(format, args...) 132 } 133 134 // Error logs message at Error level. 135 func (l *DefaultLogger) Errorf(format string, args ...interface{}) { 136 l.loggerImpl.Errorf(format, args...) 137 } 138 139 //SetLog Level 140 func (l *DefaultLogger) SetLogLevel(logLevel Level) { 141 switch logLevel { 142 case DebugLevel: 143 l.loggerImpl.Level = logrus.DebugLevel 144 case InfoLevel: 145 l.loggerImpl.Level = logrus.InfoLevel 146 case ErrorLevel: 147 l.loggerImpl.Level = logrus.ErrorLevel 148 case WarnLevel: 149 l.loggerImpl.Level = logrus.WarnLevel 150 default: 151 l.loggerImpl.Level = logrus.ErrorLevel 152 } 153 } 154 155 func (l *DefaultLogger) GetLogLevel() Level { 156 levelStr := getLevel(l.loggerImpl.Level) 157 level, _ := GetLevelForName(levelStr) 158 return level 159 } 160 161 func (logfactory *DefaultLoggerFactory) GetLogger(name string) Logger { 162 mutex.RLock() 163 l := loggerMap[name] 164 mutex.RUnlock() 165 if l == nil { 166 logImpl := logrus.New() 167 168 if logFormat == "JSON" { 169 logImpl.Formatter = &logrus.JSONFormatter{} 170 } else { 171 logImpl.Formatter = &LogFormatter{ 172 loggerName: name, 173 } 174 } 175 176 l = &DefaultLogger{ 177 loggerName: name, 178 loggerImpl: logImpl, 179 } 180 181 l.SetLogLevel(logLevel) 182 183 mutex.Lock() 184 loggerMap[name] = l 185 mutex.Unlock() 186 } 187 return l 188 }