-
Notifications
You must be signed in to change notification settings - Fork 1
/
log.go
68 lines (59 loc) 路 1.67 KB
/
log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package logger
import (
"fmt"
"github.com/charmbracelet/log"
"github.com/duxweb/go-fast/config"
"github.com/duxweb/go-fast/global"
"github.com/samber/lo"
slogmulti "github.com/samber/slog-multi"
"gopkg.in/natefinch/lumberjack.v2"
"log/slog"
"os"
"time"
)
var logs = map[string]*slog.Logger{}
func Log(names ...string) *slog.Logger {
name := "default"
if len(names) > 0 {
name = names[0]
}
if t, ok := logs[name]; ok {
return t
}
logger := slog.New(
slogmulti.Fanout(
log.NewWithOptions(os.Stderr, log.Options{
ReportCaller: true,
ReportTimestamp: true,
TimeFormat: time.DateTime,
}),
GetWriterHeader(
config.Load("logger").GetString(name+".level"),
name,
),
),
)
logs[name] = logger
return logger
}
func Init() {
slog.SetDefault(Log("default"))
}
func GetWriterHeader(level string, name string) *slog.JSONHandler {
r := &lumberjack.Logger{
Filename: fmt.Sprintf(global.DataDir+"logs/%s.log", name), // Log file path.
MaxSize: config.Load("logger").GetInt("default.maxSize"), // Maximum size of each log file to be saved, unit: M.
MaxBackups: config.Load("logger").GetInt("default.maxBackups"), // Number of file backups.
MaxAge: config.Load("logger").GetInt("default.maxAge"), // Maximum number of days to keep the files.
Compress: config.Load("logger").GetBool("default.compress"), // Compression status.
}
slogLevel := lo.Switch[string, slog.Leveler](level).
Case("debug", slog.LevelDebug).
Case("info", slog.LevelInfo).
Case("warn", slog.LevelWarn).
Case("error", slog.LevelError).
Default(slog.LevelDebug)
return slog.NewJSONHandler(r, &slog.HandlerOptions{
Level: slogLevel,
})
}