Skip to content

Commit 2c3bc93

Browse files
committed
RedirectStdLog
1 parent c7a94b5 commit 2c3bc93

File tree

4 files changed

+53
-36
lines changed

4 files changed

+53
-36
lines changed

level_encoder.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ func NewEndColorizer(typ string) patt.Encoder {
102102
}
103103

104104
func (e *colorLevel) NewEncoder(typ string) patt.Encoder {
105-
// Clear cache and remember mode
106-
ne := &colorLevel{isBegin: e.isBegin}
105+
// Build a new encoder, clear cache and remember mode
106+
e = &colorLevel{isBegin: e.isBegin}
107107

108108
isColor := false
109109
switch typ {
@@ -117,19 +117,23 @@ func (e *colorLevel) NewEncoder(typ string) patt.Encoder {
117117
}
118118

119119
if !isColor {
120-
ne.encode = e.Nop
120+
e.encode = e.Nop
121121
return e
122122
}
123123

124-
if ne.isBegin {
125-
ne.encode = e.Begin
124+
if e.isBegin {
125+
e.encode = e.Begin
126126
} else {
127-
ne.encode = e.End
127+
e.encode = e.End
128128
}
129-
return ne
129+
return e
130130
}
131131

132132
func (e *colorLevel) Encode(out *bytes.Buffer, r *driver.Recorder) {
133+
if e.encode == nil {
134+
println("encode is nil")
135+
return
136+
}
133137
e.encode(out, r.Level)
134138
}
135139

patt/encoder.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,19 @@ func NewZoneEncoder(typ string) Encoder {
9494
}
9595

9696
func (e *cacheTime) NewEncoder(typ string) Encoder {
97-
// Clear cache and remember mode
98-
ne := &cacheTime{mode: e.mode}
99-
switch ne.mode {
97+
// Build a new encoder, clear cache and remember mode
98+
e = &cacheTime{mode: e.mode}
99+
switch e.mode {
100100
case modeDate:
101-
ne.setDate(typ)
101+
e.setDate(typ)
102102
case modeZone:
103-
ne.setZone(typ)
103+
e.setZone(typ)
104104
case modeTime:
105105
fallthrough
106106
default:
107-
ne.setTime(typ)
107+
e.setTime(typ)
108108
}
109-
return ne
109+
return e
110110
}
111111

112112
func (e *cacheTime) Encode(out *bytes.Buffer, r *driver.Recorder) {

stdlog.go

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,40 @@ package nxlog4go
55

66
import (
77
"bytes"
8-
"log"
8+
stdlog "log"
99
)
1010

1111
// NewStdLog returns a *log.Logger which writes to the supplied logger Entry at
1212
// Info Level.
13-
func NewStdLog(e *Entry) *log.Logger {
13+
//
14+
// Example: log := NewStdLogAt(e.AddCallerSkip(3), level)
15+
func NewStdLog(e *Entry) *stdlog.Logger {
1416
logFunc := e.Info
15-
return log.New(&logWriter{logFunc}, "" /* prefix */, 0 /* flags */)
17+
return stdlog.New(&logWriter{logFunc}, /* out io.Writer */
18+
"", /* prefix */
19+
0 /* flags */)
1620
}
1721

1822
// NewStdLogAt returns *log.Logger which writes to supplied logger Entry at
1923
// required level.
20-
func NewStdLogAt(e *Entry, level interface{}) *log.Logger {
21-
logFunc := levelToFunc(e, level)
22-
return log.New(&logWriter{logFunc}, "" /* prefix */, 0 /* flags */)
24+
//
25+
// Example: log := NewStdLogAt(e.AddCallerSkip(3), "debug")
26+
func NewStdLogAt(e *Entry, level interface{}) *stdlog.Logger {
27+
logWriteFunc := levelToWriteFunc(e, level)
28+
return stdlog.New(&logWriter{logWriteFunc}, /* out io.Writer */
29+
"", /* prefix */
30+
0 /* flags */)
2331
}
2432

2533
// RedirectStdLog redirects output from the standard library's package-global
26-
// logger to the supplied logger at InfoLevel. Since zap already handles caller
34+
// logger to the supplied logger at Info level. Since Entry already handles caller
2735
// annotations, timestamps, etc., it automatically disables the standard
2836
// library's annotations and prefixing.
2937
//
3038
// It returns a function to restore the original prefix and flags and reset the
31-
// standard library's output to os.Stderr.
39+
// output io.Writer to os.Stderr.
40+
//
41+
// Example: restoreFunc := RedirectStdLog(elog.AddCallerSkip(3))
3242
func RedirectStdLog(e *Entry) func() {
3343
return redirectStdLogAt(e, INFO)
3444
}
@@ -40,26 +50,29 @@ func RedirectStdLog(e *Entry) func() {
4050
//
4151
// It returns a function to restore the original prefix and flags and reset the
4252
// standard library's output to os.Stderr.
53+
//
54+
// Example: restoreFunc := RedirectStdLogAt(elog.AddCallerSkip(3), "debug")
4355
func RedirectStdLogAt(e *Entry, level interface{}) func() {
4456
return redirectStdLogAt(e, level)
4557
}
4658

4759
func redirectStdLogAt(e *Entry, level interface{}) func() {
48-
flags := log.Flags()
49-
prefix := log.Prefix()
50-
writer := log.Writer()
51-
log.SetFlags(0)
52-
log.SetPrefix("")
53-
logFunc := levelToFunc(e.AddCallerSkip(3), level)
54-
log.SetOutput(&logWriter{logFunc})
60+
flags := stdlog.Flags()
61+
prefix := stdlog.Prefix()
62+
writer := stdlog.Writer()
63+
stdlog.SetFlags(0)
64+
stdlog.SetPrefix("")
65+
writeFunc := levelToWriteFunc(e, level)
66+
stdlog.SetOutput(&logWriter{writeFunc})
67+
68+
// Return the restore original function
5569
return func() {
56-
log.SetFlags(flags)
57-
log.SetPrefix(prefix)
58-
log.SetOutput(writer)
70+
stdlog.SetFlags(flags)
71+
stdlog.SetPrefix(prefix)
72+
stdlog.SetOutput(writer)
5973
}
6074
}
61-
62-
func levelToFunc(e *Entry, level interface{}) func(interface{}, ...interface{}) {
75+
func levelToWriteFunc(e *Entry, level interface{}) func(interface{}, ...interface{}) {
6376
n := Level(INFO).Int(level)
6477
switch n {
6578
case FINEST:

stdlog_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func TestRedirectStdLog(t *testing.T) {
6666
"format", "[%L] [%P] (%S) %M%F")
6767
elog := logger.With("source", "testing")
6868

69-
restore := RedirectStdLogAt(elog, "debug")
69+
restoreFunc := RedirectStdLogAt(elog.AddCallerSkip(3), "debug")
7070
log.Println("redirected.")
7171
want := "[DEBG] [redirected] (stdlog_test.go) redirected. source=testing\n"
7272
if got := buf.String(); got != want {
@@ -75,6 +75,6 @@ func TestRedirectStdLog(t *testing.T) {
7575
}
7676
buf.Reset()
7777

78-
restore()
78+
restoreFunc()
7979
testStdlog()
8080
}

0 commit comments

Comments
 (0)