56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/go-gost/core/logger"
|
|
"github.com/go-gost/x/config"
|
|
xlogger "github.com/go-gost/x/logger"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
)
|
|
|
|
func ParseLogger(cfg *config.LoggerConfig) logger.Logger {
|
|
if cfg == nil || cfg.Log == nil {
|
|
return nil
|
|
}
|
|
opts := []xlogger.Option{
|
|
xlogger.NameOption(cfg.Name),
|
|
xlogger.FormatOption(logger.LogFormat(cfg.Log.Format)),
|
|
xlogger.LevelOption(logger.LogLevel(cfg.Log.Level)),
|
|
}
|
|
|
|
var out io.Writer = os.Stderr
|
|
switch cfg.Log.Output {
|
|
case "none", "null":
|
|
return xlogger.Nop()
|
|
case "stdout":
|
|
out = os.Stdout
|
|
case "stderr", "":
|
|
out = os.Stderr
|
|
default:
|
|
if cfg.Log.Rotation != nil {
|
|
out = &lumberjack.Logger{
|
|
Filename: cfg.Log.Output,
|
|
MaxSize: cfg.Log.Rotation.MaxSize,
|
|
MaxAge: cfg.Log.Rotation.MaxAge,
|
|
MaxBackups: cfg.Log.Rotation.MaxBackups,
|
|
LocalTime: cfg.Log.Rotation.LocalTime,
|
|
Compress: cfg.Log.Rotation.Compress,
|
|
}
|
|
} else {
|
|
os.MkdirAll(filepath.Dir(cfg.Log.Output), 0755)
|
|
f, err := os.OpenFile(cfg.Log.Output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
logger.Default().Warn(err)
|
|
} else {
|
|
out = f
|
|
}
|
|
}
|
|
}
|
|
opts = append(opts, xlogger.OutputOption(out))
|
|
|
|
return xlogger.NewLogger(opts...)
|
|
}
|