Add support for logging to file

This commit is contained in:
Daniele Rondina 2020-01-03 15:22:55 +01:00
parent f28e8deb96
commit c284d3e4bf
2 changed files with 64 additions and 10 deletions

View File

@ -68,7 +68,11 @@ func LoadConfig(c *config.LuetConfig) error {
NewSpinner()
if c.GetLogging().Path != "" {
// TODO: Init logrus, etc.
// Init zap logger
err = ZapLogger()
if err != nil {
return err
}
}
// Load repositories

View File

@ -9,9 +9,12 @@ import (
"github.com/briandowns/spinner"
"github.com/kyokomi/emoji"
. "github.com/logrusorgru/aurora"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var s *spinner.Spinner = nil
var z *zap.Logger = nil
func NewSpinner() {
if s == nil {
@ -21,6 +24,34 @@ func NewSpinner() {
}
}
func ZapLogger() error {
var err error
if z == nil {
// TODO: test permission for open logfile.
cfg := zap.NewProductionConfig()
cfg.OutputPaths = []string{LuetCfg.GetLogging().Path}
cfg.Level = level2AtomicLevel(LuetCfg.GetLogging().Level)
cfg.ErrorOutputPaths = []string{}
if LuetCfg.GetLogging().JsonFormat {
cfg.Encoding = "json"
} else {
cfg.Encoding = "console"
}
cfg.DisableCaller = true
cfg.DisableStacktrace = true
cfg.EncoderConfig.TimeKey = "time"
cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
z, err = cfg.Build()
if err != nil {
fmt.Fprint(os.Stderr, "Error on initialize file logger: "+err.Error()+"\n")
return err
}
}
return nil
}
func Spinner(i int) {
if i > 43 {
@ -66,6 +97,32 @@ func level2Number(level string) int {
}
}
func log2File(level, msg string) {
switch level {
case "error":
z.Error(msg)
case "warning":
z.Warn(msg)
case "info":
z.Info(msg)
default:
z.Debug(msg)
}
}
func level2AtomicLevel(level string) zap.AtomicLevel {
switch level {
case "error":
return zap.NewAtomicLevelAt(zap.ErrorLevel)
case "warning":
return zap.NewAtomicLevelAt(zap.WarnLevel)
case "info":
return zap.NewAtomicLevelAt(zap.InfoLevel)
default:
return zap.NewAtomicLevelAt(zap.DebugLevel)
}
}
func msg(level string, msg ...interface{}) {
var message string
var confLevel, msgLevel int
@ -98,18 +155,11 @@ func msg(level string, msg ...interface{}) {
levelMsg = emoji.Sprint(levelMsg)
// if s.Active() {
// SpinnerText(levelMsg, "")
// return
// }
cmd := []interface{}{}
for _, f := range msg {
cmd = append(cmd, f)
if z != nil {
log2File(level, message)
}
fmt.Println(levelMsg)
//fmt.Println(cmd...)
}
func Warning(mess ...interface{}) {