moira
52 строки · 1.4 Кб
1package logging2
3import (4"fmt"5"os"6"path/filepath"7
8goLogging "github.com/op/go-logging"9)
10
11type (12Level = goLogging.Level13Logger = goLogging.Logger14)
15
16// ConfigureLog creates new logger based on github.com/op/go-logging package
17func ConfigureLog(logFile, logLevel, module string) (*Logger, error) {18log, err := goLogging.GetLogger(module)19if err != nil {20return nil, fmt.Errorf("Can't initialize logger: %s", err.Error())21}22level, err := goLogging.LogLevel(logLevel)23if err != nil {24level = goLogging.DEBUG25}26
27goLogging.SetFormatter(goLogging.MustStringFormatter("%{time:2006-01-02 15:04:05.000}\t%{module}\t%{level}\t%{message}"))28logBackend, err := getLogBackend(logFile)29if err != nil {30return nil, err31}32logBackend.Color = false33goLogging.SetBackend(logBackend)34goLogging.SetLevel(level, module)35return log, nil36}
37
38func getLogBackend(logFileName string) (*goLogging.LogBackend, error) {39if logFileName == "stdout" || logFileName == "" {40return goLogging.NewLogBackend(os.Stdout, "", 0), nil41}42
43logDir := filepath.Dir(logFileName)44if err := os.MkdirAll(logDir, 0755); err != nil {45return nil, fmt.Errorf("Can't create log directories %s: %s", logDir, err.Error())46}47logFile, err := os.OpenFile(logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)48if err != nil {49return nil, fmt.Errorf("Can't open log file %s: %s", logFileName, err.Error())50}51return goLogging.NewLogBackend(logFile, "", 0), nil52}
53