func (l *Logger) Initialize(logOut string, lvl interface{}) error { var ( level log.Lvl err error ) if l.Context == "" { r := rand.New(rand.NewSource(time.Now().UnixNano())) randInt := r.Int() t := time.Now() l.Context = fmt.Sprintf("%s#%d", t.Format(time.RFC3339), randInt) } if str, ok := lvl.(string); ok { level, err = log.LvlFromString(str) if err != nil { return err } } else { level = lvl.(log.Lvl) } l.Logger = log.New(log.Ctx{"context": l.Context}) l.Level = level if logOut == "STDOUT" { normalHandler := log.LvlFilterHandler(level, log.StdoutHandler) errorHandler := log.LvlFilterHandler(level, log.CallerStackHandler("%+v", log.StdoutHandler)) handler := errorMultiHandler(normalHandler, errorHandler) l.SetHandler(handler) } else if logOut == "NONE" { l.SetHandler(log.DiscardHandler()) } else { fileHandler := log.Must.FileHandler(logOut, log.LogfmtFormat()) normalHandler := log.LvlFilterHandler(level, fileHandler) errorHandler := log.LvlFilterHandler(level, log.CallerStackHandler("%+v", fileHandler)) handler := errorMultiHandler(normalHandler, errorHandler) l.SetHandler(handler) } return nil }
func setSettings(level int, filename string) { logFilename = filename debug = level filehandler := log.Must.FileHandler(filename, log.LogfmtFormat()) handler := log.MultiHandler( filehandler, log.StreamHandler(os.Stderr, log.TerminalFormat())) if debug > 1 { handler = log.CallerStackHandler("%+v", handler) } else { handler = log.CallerFileHandler(handler) } if debug < 1 { handler = log.LvlFilterHandler(log.LvlInfo, handler) } log.Root().SetHandler(handler) log.Info("Logging started", "level", debug, "log_file", logFilename) }