1package xlog
2
3import "os"
4import "fmt"
5
6// Logger is the interface exposed to the internals of a package, which uses it
7// to log messages. This is the other side of a Site.
8//
9// The 'f' functions work like Printf. The suffix-free functions work like
10// 'Print'. The 'e' functions are no-ops if nil is passed for the error;
11// otherwise, they print the error as well as the arguments specified.
12//
13// Fatal calls os.Exit(1) like "log", and Panic panics. Both emit
14// Critical-severity log messages before doing so.
15type Logger struct {
16	Sink
17}
18
19//
20
21func (l Logger) Tracef(format string, params ...interface{}) {
22	l.ReceiveLocally(SevTrace, format, params...)
23}
24
25func (l Logger) Debugf(format string, params ...interface{}) {
26	l.ReceiveLocally(SevDebug, format, params...)
27}
28
29func (l Logger) Infof(format string, params ...interface{}) {
30	l.ReceiveLocally(SevInfo, format, params...)
31}
32
33func (l Logger) Noticef(format string, params ...interface{}) {
34	l.ReceiveLocally(SevNotice, format, params...)
35}
36
37func (l Logger) Warnf(format string, params ...interface{}) {
38	l.ReceiveLocally(SevWarn, format, params...)
39}
40
41func (l Logger) Errorf(format string, params ...interface{}) {
42	l.ReceiveLocally(SevError, format, params...)
43}
44
45func (l Logger) Criticalf(format string, params ...interface{}) {
46	l.ReceiveLocally(SevCritical, format, params...)
47}
48
49func (l Logger) Alertf(format string, params ...interface{}) {
50	l.ReceiveLocally(SevAlert, format, params...)
51}
52
53func (l Logger) Emergencyf(format string, params ...interface{}) {
54	l.ReceiveLocally(SevEmergency, format, params...)
55}
56
57func (l Logger) Panicf(format string, params ...interface{}) {
58	l.Criticalf("panic: "+format, params...)
59	panic(fmt.Sprintf(format, params...))
60}
61
62func (l Logger) Fatalf(format string, params ...interface{}) {
63	l.Criticalf("fatal: "+format, params...)
64	os.Exit(1)
65}
66
67func (l Logger) Traceef(err error, format string, params ...interface{}) {
68	l.ReceiveLocallye(SevTrace, err, format, params...)
69}
70
71func (l Logger) Debugef(err error, format string, params ...interface{}) {
72	l.ReceiveLocallye(SevDebug, err, format, params...)
73}
74
75func (l Logger) Infoef(err error, format string, params ...interface{}) {
76	l.ReceiveLocallye(SevInfo, err, format, params...)
77}
78
79func (l Logger) Noticeef(err error, format string, params ...interface{}) {
80	l.ReceiveLocallye(SevNotice, err, format, params...)
81}
82
83func (l Logger) Warnef(err error, format string, params ...interface{}) {
84	l.ReceiveLocallye(SevWarn, err, format, params...)
85}
86
87func (l Logger) Erroref(err error, format string, params ...interface{}) {
88	l.ReceiveLocallye(SevError, err, format, params...)
89}
90
91func (l Logger) Criticalef(err error, format string, params ...interface{}) {
92	l.ReceiveLocallye(SevCritical, err, format, params...)
93}
94
95func (l Logger) Alertef(err error, format string, params ...interface{}) {
96	l.ReceiveLocallye(SevAlert, err, format, params...)
97}
98
99func (l Logger) Emergencyef(err error, format string, params ...interface{}) {
100	l.ReceiveLocallye(SevEmergency, err, format, params...)
101}
102
103func (l Logger) Panicef(err error, format string, params ...interface{}) {
104	if err != nil {
105		l.Criticalef(err, "panic: "+format, params...)
106		panic(fmt.Sprintf(format, params...))
107	}
108}
109
110func (l Logger) Fatalef(err error, format string, params ...interface{}) {
111	if err != nil {
112		l.Criticalef(err, "fatal: "+format, params...)
113		os.Exit(1)
114	}
115}
116
117// TODO: optimize this
118
119func (l Logger) Trace(params ...interface{}) {
120	l.Tracef("%s", fmt.Sprint(params...))
121}
122
123func (l Logger) Debug(params ...interface{}) {
124	l.Debugf("%s", fmt.Sprint(params...))
125}
126
127func (l Logger) Info(params ...interface{}) {
128	l.Infof("%s", fmt.Sprint(params...))
129}
130
131func (l Logger) Notice(params ...interface{}) {
132	l.Noticef("%s", fmt.Sprint(params...))
133}
134
135func (l Logger) Warn(params ...interface{}) {
136	l.Warnf("%s", fmt.Sprint(params...))
137}
138
139func (l Logger) Error(params ...interface{}) {
140	l.Errorf("%s", fmt.Sprint(params...))
141}
142
143func (l Logger) Critical(params ...interface{}) {
144	l.Criticalf("%s", fmt.Sprint(params...))
145}
146
147func (l Logger) Alert(params ...interface{}) {
148	l.Alertf("%s", fmt.Sprint(params...))
149}
150
151func (l Logger) Emergency(params ...interface{}) {
152	l.Emergencyf("%s", fmt.Sprint(params...))
153}
154
155func (l Logger) Panic(params ...interface{}) {
156	l.Panicf("%s", fmt.Sprint(params...))
157}
158
159func (l Logger) Fatal(params ...interface{}) {
160	l.Fatalf("%s", fmt.Sprint(params...))
161}
162
163//
164func (l Logger) Tracee(err error, params ...interface{}) {
165	if err != nil {
166		l.Tracef("%s: %v", fmt.Sprint(params...), err)
167	}
168}
169
170func (l Logger) Debuge(err error, params ...interface{}) {
171	if err != nil {
172		l.Debugf("%s: %v", fmt.Sprint(params...), err)
173	}
174}
175
176func (l Logger) Infoe(err error, params ...interface{}) {
177	if err != nil {
178		l.Infof("%s: %v", fmt.Sprint(params...), err)
179	}
180}
181
182func (l Logger) Noticee(err error, params ...interface{}) {
183	if err != nil {
184		l.Noticef("%s: %v", fmt.Sprint(params...), err)
185	}
186}
187
188func (l Logger) Warne(err error, params ...interface{}) {
189	if err != nil {
190		l.Warnf("%s: %v", fmt.Sprint(params...), err)
191	}
192}
193
194func (l Logger) Errore(err error, params ...interface{}) {
195	if err != nil {
196		l.Errorf("%s: %v", fmt.Sprint(params...), err)
197	}
198}
199
200func (l Logger) Criticale(err error, params ...interface{}) {
201	if err != nil {
202		l.Criticalf("%s: %v", fmt.Sprint(params...), err)
203	}
204}
205
206func (l Logger) Alerte(err error, params ...interface{}) {
207	if err != nil {
208		l.Alertf("%s: %v", fmt.Sprint(params...), err)
209	}
210}
211
212func (l Logger) Emergencye(err error, params ...interface{}) {
213	if err != nil {
214		l.Emergencyf("%s: %v", fmt.Sprint(params...), err)
215	}
216}
217
218func (l Logger) Fatale(err error, params ...interface{}) {
219	if err != nil {
220		l.Fatalf("%s: %v", fmt.Sprint(params...), err)
221	}
222}
223
224func (l Logger) Panice(err error, params ...interface{}) {
225	if err != nil {
226		l.Panicf("%s: %v", fmt.Sprint(params...), err)
227	}
228}
229
230func (l Logger) ReceiveLocallye(severity Severity, err error, format string, params ...interface{}) {
231	if err == nil {
232		return
233	}
234
235	l.ReceiveLocally(severity, "%s: %v", fmt.Sprintf(format, params...), err)
236}
237