4 "github.com/revel/log15"
9 // Utility package to make existing logging backwards compatible
11 // Convert the string to LogLevel
12 toLevel = map[string]LogLevel{"debug": LogLevel(log15.LvlDebug),
13 "info": LogLevel(log15.LvlInfo), "request": LogLevel(log15.LvlInfo), "warn": LogLevel(log15.LvlWarn),
14 "error": LogLevel(log15.LvlError), "crit": LogLevel(log15.LvlCrit),
15 "trace": LogLevel(log15.LvlDebug), // TODO trace is deprecated, replaced by debug
20 // The test mode flag overrides the default log level and shows only errors
21 TEST_MODE_FLAG = "testModeFlag"
22 // The special use flag enables showing messages when the logger is setup
23 SPECIAL_USE_FLAG = "specialUseFlag"
26 // Returns the logger for the name
27 func GetLogger(name string, logger MultiLogger) (l *log.Logger) {
29 case "trace": // TODO trace is deprecated, replaced by debug
30 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlDebug}, "", 0)
32 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlDebug}, "", 0)
34 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlInfo}, "", 0)
36 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlWarn}, "", 0)
38 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlError}, "", 0)
40 l = log.New(loggerRewrite{Logger: logger, Level: log15.LvlInfo}, "", 0)
47 // Used by the initFilterLog to handle the filters
48 var logFilterList = []struct {
49 LogPrefix, LogSuffix string
50 parentHandler func(map[string]interface{}) ParentLogHandler
53 func(keyMap map[string]interface{}) ParentLogHandler {
54 return NewParentLogHandler(func(child LogHandler) LogHandler {
55 return MatchMapHandler(keyMap, child)
61 func(keyMap map[string]interface{}) ParentLogHandler {
62 return NewParentLogHandler(func(child LogHandler) LogHandler {
63 return NotMatchMapHandler(keyMap, child)
68 // This structure and method will handle the old output format and log it to the new format
69 type loggerRewrite struct {
75 // The message indicating that a logger is using a deprecated log mechanism
76 var log_deprecated = []byte("* LOG DEPRECATED * ")
78 // Implements the Write of the logger
79 func (lr loggerRewrite) Write(p []byte) (n int, err error) {
80 if !lr.hideDeprecated {
81 p = append(log_deprecated, p...)
84 if len(p) > 0 && p[n-1] == '\n' {
91 lr.Logger.Info(string(p))
93 lr.Logger.Debug(string(p))
95 lr.Logger.Warn(string(p))
97 lr.Logger.Error(string(p))
99 lr.Logger.Crit(string(p))
105 // For logging purposes the call stack can be used to record the stack trace of a bad error
106 // simply pass it as a context field in your log statement like
107 // `controller.Log.Crit("This should not occur","stack",revel.NewCallStack())`
108 func NewCallStack() interface{} {