X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2Frevel%2Flogger%2Futils.go;fp=src%2Ffoundation%2Fapi%2Frevel%2Flogger%2Futils.go;h=3918cc1d951cb8723d3d04737540f7c6c3b4a01b;hb=1d1ee6961c93781e1187d8c7faa868da6b2f01f4;hp=0000000000000000000000000000000000000000;hpb=56dd5e0f2164b37b40ac1daa188ccc618b4cbd19;p=iec.git diff --git a/src/foundation/api/revel/logger/utils.go b/src/foundation/api/revel/logger/utils.go new file mode 100644 index 0000000..3918cc1 --- /dev/null +++ b/src/foundation/api/revel/logger/utils.go @@ -0,0 +1,110 @@ +package logger + +import ( + "github.com/revel/log15" + "gopkg.in/stack.v0" + "log" +) + +// Utility package to make existing logging backwards compatible +var ( + // Convert the string to LogLevel + toLevel = map[string]LogLevel{"debug": LogLevel(log15.LvlDebug), + "info": LogLevel(log15.LvlInfo), "request": LogLevel(log15.LvlInfo), "warn": LogLevel(log15.LvlWarn), + "error": LogLevel(log15.LvlError), "crit": LogLevel(log15.LvlCrit), + "trace": LogLevel(log15.LvlDebug), // TODO trace is deprecated, replaced by debug + } +) + +const ( + // The test mode flag overrides the default log level and shows only errors + TEST_MODE_FLAG = "testModeFlag" + // The special use flag enables showing messages when the logger is setup + SPECIAL_USE_FLAG = "specialUseFlag" +) + +// Returns the logger for the name +func GetLogger(name string, logger MultiLogger) (l *log.Logger) { + switch name { + case "trace": // TODO trace is deprecated, replaced by debug + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlDebug}, "", 0) + case "debug": + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlDebug}, "", 0) + case "info": + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlInfo}, "", 0) + case "warn": + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlWarn}, "", 0) + case "error": + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlError}, "", 0) + case "request": + l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlInfo}, "", 0) + } + + return l + +} + +// Used by the initFilterLog to handle the filters +var logFilterList = []struct { + LogPrefix, LogSuffix string + parentHandler func(map[string]interface{}) ParentLogHandler +}{{ + "log.", ".filter", + func(keyMap map[string]interface{}) ParentLogHandler { + return NewParentLogHandler(func(child LogHandler) LogHandler { + return MatchMapHandler(keyMap, child) + }) + + }, +}, { + "log.", ".nfilter", + func(keyMap map[string]interface{}) ParentLogHandler { + return NewParentLogHandler(func(child LogHandler) LogHandler { + return NotMatchMapHandler(keyMap, child) + }) + }, +}} + +// This structure and method will handle the old output format and log it to the new format +type loggerRewrite struct { + Logger MultiLogger + Level log15.Lvl + hideDeprecated bool +} + +// The message indicating that a logger is using a deprecated log mechanism +var log_deprecated = []byte("* LOG DEPRECATED * ") + +// Implements the Write of the logger +func (lr loggerRewrite) Write(p []byte) (n int, err error) { + if !lr.hideDeprecated { + p = append(log_deprecated, p...) + } + n = len(p) + if len(p) > 0 && p[n-1] == '\n' { + p = p[:n-1] + n-- + } + + switch lr.Level { + case log15.LvlInfo: + lr.Logger.Info(string(p)) + case log15.LvlDebug: + lr.Logger.Debug(string(p)) + case log15.LvlWarn: + lr.Logger.Warn(string(p)) + case log15.LvlError: + lr.Logger.Error(string(p)) + case log15.LvlCrit: + lr.Logger.Crit(string(p)) + } + + return +} + +// For logging purposes the call stack can be used to record the stack trace of a bad error +// simply pass it as a context field in your log statement like +// `controller.Log.Crit("This should not occur","stack",revel.NewCallStack())` +func NewCallStack() interface{} { + return stack.Trace() +}