src/mylog/log.go (view raw)
1package mylog
2
3import (
4 "io"
5 "log"
6)
7
8type Level uint
9
10const (
11 FATAL Level = iota
12 ERROR
13 WARN
14 INFO
15 DEBUG
16)
17
18type Logger struct {
19 logger *log.Logger
20 fatalLogger *log.Logger
21 errorLogger *log.Logger
22 warnLogger *log.Logger
23 infoLogger *log.Logger
24 debugLogger *log.Logger
25 level Level
26 name string
27}
28
29func NewLogger(out io.Writer, name string, level Level) (l *Logger) {
30 l = &Logger{
31 level: level,
32
33 logger: log.New(out, "", 3),
34 fatalLogger: log.New(out, "", 3),
35 errorLogger: log.New(out, "", 3),
36 warnLogger: log.New(out, "", 3),
37 infoLogger: log.New(out, "", 3),
38 debugLogger: log.New(out, "", 3),
39 }
40
41 l.SetName(name)
42 return
43
44}
45
46func parsePrefix(name string, level string) string {
47 return level + " " + name + " "
48}
49
50func (l Logger) GetLevel() Level {
51 return l.level
52}
53
54func (l *Logger) SetLevel(lvl Level) {
55 l.level = lvl
56}
57
58func (l *Logger) SetName(name string) {
59 l.name = name
60 l.logger.SetPrefix(parsePrefix(name, "LOG "))
61 l.fatalLogger.SetPrefix(parsePrefix(name, "FATAL"))
62 l.errorLogger.SetPrefix(parsePrefix(name, "ERROR"))
63 l.warnLogger.SetPrefix(parsePrefix(name, "WARN "))
64 l.infoLogger.SetPrefix(parsePrefix(name, "INFO "))
65 l.debugLogger.SetPrefix(parsePrefix(name, "DEBUG"))
66}
67
68// log functions
69
70func (l Logger) Printf(format string, v ...any) {
71 l.logger.Printf(format, v...)
72}
73
74func (l Logger) Println(v ...any) {
75 l.logger.Println(v...)
76}
77
78func (l Logger) Fatal(v ...any) {
79 l.fatalLogger.Fatal(v...)
80}
81
82func (l Logger) Fatalf(format string, v ...any) {
83 l.fatalLogger.Fatalf(format, v...)
84}
85
86func (l Logger) Error(v ...any) {
87 l.errorLogger.Println(v...)
88}
89
90func (l Logger) Errorf(format string, v ...any) {
91 l.errorLogger.Printf(format, v...)
92}
93
94func (l Logger) Warn(v ...any) {
95 l.warnLogger.Println(v...)
96}
97
98func (l Logger) Warnf(format string, v ...any) {
99 l.warnLogger.Printf(format, v...)
100}
101
102func (l Logger) Info(v ...any) {
103 if l.level < INFO {
104 return
105 }
106 l.infoLogger.Println(v...)
107}
108
109func (l Logger) Infof(format string, v ...any) {
110 if l.level < INFO {
111 return
112 }
113 l.infoLogger.Printf(format, v...)
114}
115
116func (l Logger) Debug(v ...any) {
117 if l.level < DEBUG {
118 return
119 }
120 l.debugLogger.Println(v...)
121}
122
123func (l Logger) Debugf(format string, v ...any) {
124 if l.level < DEBUG {
125 return
126 }
127 l.debugLogger.Printf(format, v...)
128}