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  }