master
go 54 lines 1.01 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package logger
4
5 import (
6 "log/slog"
7 "strings"
8 )
9
10 const (
11 levelNotice = slog.Level(2)
12 levelDisable = slog.Level(99)
13 )
14
15 var (
16 customLevels = map[slog.Leveler]string{
17 levelNotice: "NOTICE",
18 }
19 customLevelsTerm = map[slog.Leveler]string{
20 levelNotice: "\u001B[34m" + "NTC" + "\u001B[0m",
21 }
22 )
23
24 var Level = &level{lvl: &slog.LevelVar{}}
25
26 type level struct {
27 lvl *slog.LevelVar
28 }
29
30 func (l *level) Enabled(level slog.Level) bool {
31 return level >= l.lvl.Level()
32 }
33
34 func (l *level) Set(level slog.Level) {
35 l.lvl.Set(level)
36 }
37
38 func (l *level) SetByName(level string) {
39 // https://github.com/netdata/netdata/tree/master/src/libnetdata/log#log-levels
40 switch strings.ToLower(level) {
41 case "err", "error":
42 l.lvl.Set(slog.LevelError)
43 case "warn", "warning":
44 l.lvl.Set(slog.LevelWarn)
45 case "notice":
46 l.lvl.Set(levelNotice)
47 case "info":
48 l.lvl.Set(slog.LevelInfo)
49 case "debug":
50 l.lvl.Set(slog.LevelDebug)
51 case "emergency", "alert", "critical":
52 l.lvl.Set(levelDisable)
53 }
54 }