Skip to content

Commit a8d8249

Browse files
authored
Merge pull request #5 from smallstep/stdlogger
Add method to create a *log.Logger backed by the package.
2 parents 01a8088 + 89b2b85 commit a8d8249

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

examples/httplog.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ func main() {
2323
})
2424

2525
srv := &http.Server{
26-
Addr: ":8080",
27-
Handler: httplog.Middleware(logger, http.DefaultServeMux),
26+
Addr: ":8080",
27+
Handler: httplog.Middleware(logger, http.DefaultServeMux),
28+
ErrorLog: logger.StdLogger(logging.ErrorLevel),
2829
}
2930

3031
logger.Infof("start listening at %s.", srv.Addr)

logger.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package logging
22

33
import (
44
"fmt"
5+
"io"
6+
"log"
57
"os"
68
"strings"
79
"time"
@@ -12,6 +14,17 @@ import (
1214
"go.uber.org/zap/zapcore"
1315
)
1416

17+
// Level indicates the log level.
18+
type Level int8
19+
20+
const (
21+
DebugLevel Level = iota - 1
22+
InfoLevel
23+
WarnLevel
24+
ErrorLevel
25+
FatalLevel
26+
)
27+
1528
// DefaultTraceHeader is the default header used as a trace id.
1629
const DefaultTraceHeader = "Traceparent"
1730

@@ -22,6 +35,30 @@ type Logger struct {
2235
options *options
2336
}
2437

38+
type writer struct {
39+
*zap.Logger
40+
Name zap.Field
41+
Level Level
42+
}
43+
44+
func (w *writer) Write(b []byte) (int, error) {
45+
switch w.Level {
46+
case DebugLevel:
47+
w.Debug(string(b), w.Name)
48+
case InfoLevel:
49+
w.Info(string(b), w.Name)
50+
case WarnLevel:
51+
w.Warn(string(b), w.Name)
52+
case ErrorLevel:
53+
w.Error(string(b), w.Name)
54+
case FatalLevel:
55+
w.Fatal(string(b), w.Name)
56+
default:
57+
w.Info(string(b), w.Name)
58+
}
59+
return len(b), nil
60+
}
61+
2562
// New initializes the logger with the given options.
2663
func New(name string, opts ...Option) (*Logger, error) {
2764
o := defaultOptions()
@@ -117,6 +154,25 @@ func (l *Logger) TimeFormat() string {
117154
return l.options.TimeFormat
118155
}
119156

157+
// Writer returns a io.Writer with the specified log level.
158+
func (l *Logger) Writer(level Level) io.Writer {
159+
return &writer{
160+
Logger: l.Logger,
161+
Name: zap.String("name", l.name),
162+
Level: level,
163+
}
164+
}
165+
166+
// StdLogger returns a *log.Logger with the specified log level.
167+
// srv := &http.Server{
168+
// Addr: ":8080",
169+
// Handler: httplog.Middleware(logger, http.DefaultServeMux),
170+
// ErrorLog: logger.StdLogger(logging.ErrorLevel),
171+
// }
172+
func (l *Logger) StdLogger(level Level) *log.Logger {
173+
return log.New(l.Writer(level), "", 0)
174+
}
175+
120176
// Debug logs a message at debug level.
121177
func (l *Logger) Debug(msg string, fields ...zap.Field) {
122178
l.Logger.Debug(msg, fields...)

0 commit comments

Comments
 (0)