-
Notifications
You must be signed in to change notification settings - Fork 59
/
logger.go
118 lines (99 loc) · 2.7 KB
/
logger.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
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
111
112
113
114
115
116
117
118
package logger
import (
"fmt"
"io"
"log"
"os"
"path/filepath"
"runtime"
"github.com/vesoft-inc/nebula-importer/v3/pkg/base"
)
type Logger interface {
Info(v ...interface{})
Infof(format string, v ...interface{})
Warn(v ...interface{})
Warnf(format string, v ...interface{})
Error(v ...interface{})
Errorf(format string, v ...interface{})
Fatal(v ...interface{})
Fatalf(format string, v ...interface{})
}
var Log Logger = NewRunnerLogger("")
func SetLogger(l Logger) {
Log = l
}
// RunnerLogger TODO: Need to optimize it
type RunnerLogger struct {
logger *log.Logger
}
func NewRunnerLogger(path string) *RunnerLogger {
var w io.Writer = os.Stdout
if path != "" {
file := base.MustCreateFile(path)
w = io.MultiWriter(file, os.Stdout)
}
logger := log.New(w, "", log.LstdFlags)
r := new(RunnerLogger)
r.logger = logger
return r
}
func (r *RunnerLogger) Info(v ...interface{}) {
r.infoWithSkip(2, fmt.Sprint(v...))
}
func (r *RunnerLogger) Infof(format string, v ...interface{}) {
r.infoWithSkip(2, fmt.Sprintf(format, v...))
}
func (r *RunnerLogger) Warn(v ...interface{}) {
r.warnWithSkip(2, fmt.Sprint(v...))
}
func (r *RunnerLogger) Warnf(format string, v ...interface{}) {
r.warnWithSkip(2, fmt.Sprintf(format, v...))
}
func (r *RunnerLogger) Error(v ...interface{}) {
r.errorWithSkip(2, fmt.Sprint(v...))
}
func (r *RunnerLogger) Errorf(format string, v ...interface{}) {
r.errorWithSkip(2, fmt.Sprintf(format, v...))
}
func (r *RunnerLogger) Fatal(v ...interface{}) {
r.fatalWithSkip(2, fmt.Sprint(v...))
}
func (r *RunnerLogger) Fatalf(format string, v ...interface{}) {
r.fatalWithSkip(2, fmt.Sprintf(format, v...))
}
func (r *RunnerLogger) infoWithSkip(skip int, msg string) {
_, file, no, ok := runtime.Caller(skip)
if ok {
file = filepath.Base(file)
r.logger.Printf("[INFO] %s:%d: %s", file, no, msg)
} else {
r.logger.Fatalf("Fail to get caller info of logger.Log.Info")
}
}
func (r *RunnerLogger) warnWithSkip(skip int, msg string) {
_, file, no, ok := runtime.Caller(skip)
if ok {
file = filepath.Base(file)
r.logger.Printf("[WARN] %s:%d: %s", file, no, msg)
} else {
r.logger.Fatalf("Fail to get caller info of logger.Log.Warn")
}
}
func (r *RunnerLogger) errorWithSkip(skip int, msg string) {
_, file, no, ok := runtime.Caller(skip)
if ok {
file = filepath.Base(file)
r.logger.Printf("[ERROR] %s:%d: %s", file, no, msg)
} else {
r.logger.Fatalf("Fail to get caller info of logger.Log.Error")
}
}
func (r *RunnerLogger) fatalWithSkip(skip int, msg string) {
_, file, no, ok := runtime.Caller(skip)
if ok {
file = filepath.Base(file)
r.logger.Fatalf("[FATAL] %s:%d: %s", file, no, msg)
} else {
r.logger.Fatalf("Fail to get caller info of logger.Fatal")
}
}