-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.go
More file actions
110 lines (91 loc) · 2.02 KB
/
logger.go
File metadata and controls
110 lines (91 loc) · 2.02 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* Copyright (c) 2024-2026 Mikhail Knyazhev <markus621@yandex.com>. All rights reserved.
* Use of this source code is governed by a BSD 3-Clause license that can be found in the LICENSE file.
*/
package logx
import (
"fmt"
"io"
"os"
"sync/atomic"
"time"
)
// Log base model
type Log struct {
level uint32
writer io.Writer
formatter Formatter
}
// New init new logger
func New() *Log {
return &Log{
level: LevelError,
writer: os.Stdout,
formatter: NewFormatJSON(),
}
}
func (l *Log) writeMessage(level uint32, call func(v *Message)) {
if l.GetLevel() < level {
return
}
m := poolMessage.Get()
defer func() {
poolMessage.Put(m)
}()
call(m)
lvl, ok := levels[level]
if !ok {
lvl = "UNK"
}
m.Level, m.Time = lvl, time.Now()
err := l.formatter.Encode(l.writer, m)
if err != nil {
fmt.Println(err)
}
}
// SetOutput change writer
func (l *Log) SetOutput(out io.Writer) {
l.writer = out
}
func (l *Log) SetFormatter(f Formatter) {
l.formatter = f
}
// SetLevel change Log level
func (l *Log) SetLevel(v uint32) {
atomic.StoreUint32(&l.level, v)
}
// GetLevel getting Log level
func (l *Log) GetLevel() uint32 {
return atomic.LoadUint32(&l.level)
}
func (l *Log) Info(message string, args ...interface{}) {
l.writeMessage(LevelInfo, func(v *Message) {
v.Message = message
v.Ctx = append(v.Ctx, args...)
})
}
func (l *Log) Warn(message string, args ...interface{}) {
l.writeMessage(LevelWarn, func(v *Message) {
v.Message = message
v.Ctx = append(v.Ctx, args...)
})
}
func (l *Log) Error(message string, args ...interface{}) {
l.writeMessage(LevelError, func(v *Message) {
v.Message = message
v.Ctx = append(v.Ctx, args...)
})
}
func (l *Log) Debug(message string, args ...interface{}) {
l.writeMessage(LevelDebug, func(v *Message) {
v.Message = message
v.Ctx = append(v.Ctx, args...)
})
}
func (l *Log) Fatal(message string, args ...interface{}) {
l.writeMessage(levelFatal, func(v *Message) {
v.Message = message
v.Ctx = append(v.Ctx, args...)
})
os.Exit(1)
}