支持日志输出到文件

dev
truthhun 1 year ago
parent 94fed1b3e7
commit 3155e10fa5

3
.gitignore vendored

@ -14,4 +14,5 @@ indexes
sitemap
!util/sitemap
license.cert
*.cert
*.cert
/logs

@ -27,6 +27,7 @@ import (
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
"gopkg.in/natefinch/lumberjack.v2"
)
var (
@ -103,21 +104,17 @@ func initConfig() {
fmt.Println("viper.Unmarshal", err)
}
initLogger(cfg.Level, cfg.LogEncoding)
initLogger(cfg.Level, cfg.LogEncoding, cfg.Logger)
cfg.Database.Prefix = "mnt_"
logger.Info("config", zap.Any("config", cfg))
}
func initLogger(level, LogEncoding string, paths ...string) {
func initLogger(level, LogEncoding string, logCfg ...conf.LoggerConfig) {
var err error
cfg := zap.NewProductionConfig()
cfg.Encoding = "console"
if LogEncoding != "console" {
cfg.Encoding = "json"
}
cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
lv := zap.InfoLevel
@ -134,17 +131,44 @@ func initLogger(level, LogEncoding string, paths ...string) {
lv = zap.InfoLevel
}
cfg.Level.SetLevel(lv)
if len(logCfg) == 0 || logCfg[0].Filename == "" {
cfg.Encoding = "console"
if LogEncoding != "console" {
cfg.Encoding = "json"
}
cfg.Level.SetLevel(lv)
if len(paths) == 0 {
paths = append(paths, "stdout")
paths := []string{"stdout"}
cfg.ErrorOutputPaths = paths
cfg.OutputPaths = paths
logger, err = cfg.Build()
if err != nil {
logger.Fatal("zap build", zap.Error(err))
}
return
}
cfg.ErrorOutputPaths = paths
cfg.OutputPaths = paths
w := zapcore.AddSync(&lumberjack.Logger{
Filename: logCfg[0].Filename,
MaxSize: logCfg[0].MaxSizeMB, // megabytes
MaxBackups: logCfg[0].MaxBackups,
MaxAge: logCfg[0].MaxAgeDays, // days
Compress: logCfg[0].Comptress,
})
logger, err = cfg.Build()
if err != nil {
logger.Fatal("zap build", zap.Error(err))
enc := zapcore.NewConsoleEncoder(cfg.EncoderConfig)
if LogEncoding != "console" {
enc = zapcore.NewJSONEncoder(cfg.EncoderConfig)
}
core := zapcore.NewCore(
enc,
w,
lv,
)
logger = zap.New(
core,
zap.AddCaller(),
// zap.AddCallerSkip(1),
)
}

@ -1,10 +1,19 @@
package conf
type LoggerConfig struct {
Filename string
MaxSizeMB int // 每份日志大小
MaxBackups int // 日志保留多少份
MaxAgeDays int // 保留多少天的日志
Comptress bool
}
// Config app config
type Config struct {
Level string //
LogEncoding string // log encoding, json or console
Port int // listent port
Logger LoggerConfig
Port int // listent port
Database Database
JWT JWT
}

@ -21,6 +21,7 @@ require (
google.golang.org/grpc v1.44.0
google.golang.org/protobuf v1.28.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gorm.io/driver/mysql v1.3.2
gorm.io/gorm v1.23.2
)

@ -889,6 +889,8 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AW
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

Loading…
Cancel
Save