Skip to content

Commit e886e7f

Browse files
author
mobus
committed
add log
1 parent 3c79e6d commit e886e7f

File tree

2 files changed

+210
-0
lines changed

2 files changed

+210
-0
lines changed

examples/log/log_ex.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package main
2+
3+
import "github.com/sunvim/utils/log"
4+
5+
func main() {
6+
log.SetPrefix("Hello")
7+
8+
log.Info("info hello log")
9+
10+
log.Error("error log")
11+
12+
}

log/log.go

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
// Copyright (c) 2021 mobus [email protected]
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package log
16+
17+
import (
18+
"fmt"
19+
stdlog "log"
20+
"os"
21+
)
22+
23+
// Logger is a generic logging interface
24+
type Logger interface {
25+
Log(v ...interface{})
26+
Logf(format string, v ...interface{})
27+
}
28+
29+
// Level is a log level
30+
type Level int
31+
32+
const (
33+
// LevelFatal fatal level
34+
LevelFatal Level = iota + 1
35+
// LevelError error level
36+
LevelError
37+
// LevelInfo info level
38+
LevelInfo
39+
// LevelDebug debug level
40+
LevelDebug
41+
)
42+
43+
func (l Level) String() string {
44+
switch l {
45+
default:
46+
return ""
47+
case LevelDebug:
48+
return "[DBG]"
49+
case LevelError:
50+
return "[ERR]"
51+
case LevelInfo:
52+
return "[INF]"
53+
case LevelFatal:
54+
return "[FTL]"
55+
}
56+
}
57+
58+
var (
59+
// the local logger
60+
logger Logger = &defaultLogLogger{}
61+
62+
// default log level is info
63+
level = LevelInfo
64+
65+
prefix = "[Slog]"
66+
)
67+
68+
type defaultLogLogger struct{}
69+
70+
func (t *defaultLogLogger) Log(v ...interface{}) {
71+
stdlog.Print(v...)
72+
}
73+
74+
func (t *defaultLogLogger) Logf(format string, v ...interface{}) {
75+
stdlog.Printf(format, v...)
76+
}
77+
78+
func init() {
79+
switch os.Getenv("SLOG_LOG_LEVEL") {
80+
case "debug":
81+
level = LevelDebug
82+
case "info":
83+
level = LevelInfo
84+
case "error":
85+
level = LevelError
86+
case "fatal":
87+
level = LevelFatal
88+
}
89+
}
90+
91+
func SetLogPrefix(logName string) {
92+
prefix = logName
93+
}
94+
95+
// Log makes use of Logger
96+
func Log(v ...interface{}) {
97+
if len(prefix) > 0 {
98+
logger.Log(append([]interface{}{prefix, " "}, v...)...)
99+
return
100+
}
101+
logger.Log(v...)
102+
}
103+
104+
// Logf makes use of Logger
105+
func Logf(format string, v ...interface{}) {
106+
if len(prefix) > 0 {
107+
format = prefix + " " + format
108+
}
109+
logger.Logf(format, v...)
110+
}
111+
112+
// WithLevel logs with the level specified
113+
func WithLevel(l Level, v ...interface{}) {
114+
if l > level {
115+
return
116+
}
117+
Log(v...)
118+
}
119+
120+
// WithLevelf logs with the level specified
121+
func WithLevelf(l Level, format string, v ...interface{}) {
122+
if l > level {
123+
return
124+
}
125+
Logf(format, v...)
126+
}
127+
128+
// Debug provides debug level logging
129+
func Debug(v ...interface{}) {
130+
WithLevel(LevelDebug, v...)
131+
}
132+
133+
// Debugf provides debug level logging
134+
func Debugf(format string, v ...interface{}) {
135+
WithLevelf(LevelDebug, format, v...)
136+
}
137+
138+
// Info provides info level logging
139+
func Info(v ...interface{}) {
140+
WithLevel(LevelInfo, v...)
141+
}
142+
143+
// Infof provides info level logging
144+
func Infof(format string, v ...interface{}) {
145+
WithLevelf(LevelInfo, format, v...)
146+
}
147+
148+
// Error provides warn level logging
149+
func Error(v ...interface{}) {
150+
WithLevel(LevelError, v...)
151+
}
152+
153+
// Errorf provides warn level logging
154+
func Errorf(format string, v ...interface{}) {
155+
WithLevelf(LevelError, format, v...)
156+
}
157+
158+
// Fatal logs with Log and then exits with os.Exit(1)
159+
func Fatal(v ...interface{}) {
160+
WithLevel(LevelFatal, v...)
161+
os.Exit(1)
162+
}
163+
164+
// Fatalf logs with Logf and then exits with os.Exit(1)
165+
func Fatalf(format string, v ...interface{}) {
166+
WithLevelf(LevelFatal, format, v...)
167+
os.Exit(1)
168+
}
169+
170+
// SetLogger sets the local logger
171+
func SetLogger(l Logger) {
172+
logger = l
173+
}
174+
175+
// GetLogger returns the local logger
176+
func GetLogger() Logger {
177+
return logger
178+
}
179+
180+
// SetLevel sets the log level
181+
func SetLevel(l Level) {
182+
level = l
183+
}
184+
185+
// GetLevel returns the current level
186+
func GetLevel() Level {
187+
return level
188+
}
189+
190+
// SetPrefix sets a prefix for the logger
191+
func SetPrefix(p string) {
192+
prefix = p
193+
}
194+
195+
// Name sets service name
196+
func Name(name string) {
197+
prefix = fmt.Sprintf("[%s]", name)
198+
}

0 commit comments

Comments
 (0)