73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var Logger zerolog.Logger
|
|
|
|
// InitLogger 初始化日志
|
|
func InitLogger(level, format, output string) error {
|
|
// 设置日志级别
|
|
var logLevel zerolog.Level
|
|
switch level {
|
|
case "debug":
|
|
logLevel = zerolog.DebugLevel
|
|
case "info":
|
|
logLevel = zerolog.InfoLevel
|
|
case "warn":
|
|
logLevel = zerolog.WarnLevel
|
|
case "error":
|
|
logLevel = zerolog.ErrorLevel
|
|
default:
|
|
logLevel = zerolog.InfoLevel
|
|
}
|
|
zerolog.SetGlobalLevel(logLevel)
|
|
|
|
// 设置输出
|
|
var writer io.Writer
|
|
if output == "stdout" || output == "" {
|
|
writer = os.Stdout
|
|
} else {
|
|
file, err := os.OpenFile(output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
writer = file
|
|
}
|
|
|
|
// 设置格式
|
|
if format == "text" {
|
|
writer = zerolog.ConsoleWriter{Out: writer}
|
|
}
|
|
|
|
Logger = zerolog.New(writer).With().Timestamp().Logger()
|
|
log.Logger = Logger
|
|
|
|
return nil
|
|
}
|
|
|
|
// WithFields 创建带字段的日志
|
|
func WithFields(fields map[string]interface{}) *zerolog.Event {
|
|
event := Logger.Info()
|
|
for k, v := range fields {
|
|
switch val := v.(type) {
|
|
case string:
|
|
event = event.Str(k, val)
|
|
case int:
|
|
event = event.Int(k, val)
|
|
case int64:
|
|
event = event.Int64(k, val)
|
|
case bool:
|
|
event = event.Bool(k, val)
|
|
default:
|
|
event = event.Interface(k, val)
|
|
}
|
|
}
|
|
return event
|
|
}
|