func string2Level(logLevelStr string) (timber.Level, error) { logLevelStr = strings.ToUpper(logLevelStr) for logLevel, levelStr := range timber.LongLevelStrings { if logLevelStr == levelStr { return timber.Level(logLevel), nil } } return 0, errors.New("Not found") }
func (a *App) makeConfigLogger() (timber.ConfigLogger, bool) { defaultLogPattern := "[%D %T] [%L] %M" filenamesByDefault, _ := a.Cfg.GetBool("gop", "log_filename", false) if filenamesByDefault { defaultLogPattern = "[%D %T] [%L] %s %M" } logPattern, _ := a.Cfg.Get("gop", "log_pattern", defaultLogPattern) // If set, hack all logging to stdout for dev forceStdout, _ := a.Cfg.GetBool("gop", "stdout_only_logging", false) configLogger := timber.ConfigLogger{ LogWriter: new(timber.ConsoleWriter), Level: timber.INFO, Formatter: timber.NewPatFormatter(logPattern), } defaultLogDir, _ := a.Cfg.Get("gop", "log_dir", "/var/log") fellbackToCWD := false a.logDir = defaultLogDir + "/" + a.ProjectName if !forceStdout { defaultLogFname := a.logDir + "/" + a.AppName + ".log" logFname, _ := a.Cfg.Get("gop", "log_file", defaultLogFname) _, dirExistsErr := os.Stat(a.logDir) if dirExistsErr != nil && os.IsNotExist(dirExistsErr) { // Carry on with stdout logging, but remember to mention it fellbackToCWD = true a.logDir = "." } else { newWriter, err := timber.NewFileWriter(logFname) if err != nil { panic(fmt.Sprintf("Can't open log file: %s", err)) } configLogger.LogWriter = newWriter } } logLevelStr, _ := a.Cfg.Get("gop", "log_level", "INFO") logLevel, err := string2Level(logLevelStr) if err == nil { configLogger.Level = timber.Level(logLevel) } granularsPrefix, _ := a.Cfg.Get("gop", "log_granulars_prefix", "") granularsStrs, _ := a.Cfg.GetList("gop", "log_granulars", nil) if granularsStrs != nil { configLogger.Granulars = make(map[string]timber.Level) GRANULARS: for _, granStr := range granularsStrs { bits := strings.Split(granStr, ":") if len(bits) != 2 { continue GRANULARS } pkgPart := bits[0] pkgLevel := bits[1] if pkgPart == "" || pkgLevel == "" { continue GRANULARS } pkgName := pkgPart if granularsPrefix != "" { pkgName = granularsPrefix + "/" + pkgPart } logLevel, err := string2Level(pkgLevel) if err == nil { configLogger.Granulars[pkgName] = logLevel } } } return configLogger, fellbackToCWD }