@@ -2,6 +2,8 @@ package logging
22
33import (
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.
1629const 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.
2663func 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.
121177func (l * Logger ) Debug (msg string , fields ... zap.Field ) {
122178 l .Logger .Debug (msg , fields ... )
0 commit comments