@@ -32,7 +32,8 @@ type Handler interface {
3232}
3333
3434type Logger struct {
35- handler * logrus.Entry
35+ defaultHandler * logrus.Entry
36+ errorHandler * logrus.Entry
3637}
3738
3839// TerminalFormatter is exported
@@ -54,7 +55,7 @@ func (f *TerminalFormatter) Format(entry *logrus.Entry) ([]byte, error) {
5455 return append ([]byte (msg ), '\n' ), nil
5556}
5657
57- func New (appname string , opts Options ) ( Handler , error ) {
58+ func newLogrusLogger (appname string , opts Options , defaultOutput io. Writer ) * logrus. Entry {
5859 log := logrus .New ()
5960
6061 switch opts .Format {
@@ -81,43 +82,52 @@ func New(appname string, opts Options) (Handler, error) {
8182 log .AddHook (& CallerHook {skippedPaths : skippedPaths })
8283 }
8384
84- log .SetOutput (os . Stdout )
85+ log .SetOutput (defaultOutput )
8586 if opts .Output != nil {
8687 log .SetOutput (opts .Output )
8788 }
8889
90+ if opts .ErrorOutput != nil {
91+ log .SetOutput (opts .ErrorOutput )
92+ }
93+
8994 log .SetLevel (logrus .Level (opts .LogLevel ))
9095
91- entry := log .WithFields (logrus.Fields {"app" : appname })
92- return & Logger {handler : entry }, nil
96+ return log .WithFields (logrus.Fields {"app" : appname })
97+ }
98+
99+ func New (appname string , opts Options ) (Handler , error ) {
100+ entry := newLogrusLogger (appname , opts , os .Stdout )
101+ errEntry := newLogrusLogger (appname , opts , os .Stderr )
102+ return & Logger {defaultHandler : entry , errorHandler : errEntry }, nil
93103}
94104
95105func (l * Logger ) Info (description ... interface {}) {
96- l .handler .Log (logrus .InfoLevel ,
106+ l .defaultHandler .Log (logrus .InfoLevel ,
97107 description ... ,
98108 )
99109}
100110
101111func (l * Logger ) Infof (format string , args ... interface {}) {
102- l .handler .Log (logrus .InfoLevel , fmt .Sprintf (format , args ... ))
112+ l .defaultHandler .Log (logrus .InfoLevel , fmt .Sprintf (format , args ... ))
103113}
104114
105115func (l * Logger ) Debug (description ... interface {}) {
106- l .handler .Log (logrus .DebugLevel ,
116+ l .defaultHandler .Log (logrus .DebugLevel ,
107117 description ... ,
108118 )
109119}
110120
111121func (l * Logger ) Debugf (format string , args ... interface {}) {
112- l .handler .Log (logrus .DebugLevel , fmt .Sprintf (format , args ... ))
122+ l .defaultHandler .Log (logrus .DebugLevel , fmt .Sprintf (format , args ... ))
113123}
114124
115125func (l * Logger ) Warn (err error ) {
116126 if err == nil {
117127 return
118128 }
119129
120- l .handler .WithFields (logrus.Fields {
130+ l .defaultHandler .WithFields (logrus.Fields {
121131 "code" : errors .GetCode (err ),
122132 "severity" : errors .GetSeverity (err ),
123133 "short-description" : errors .GetSDescription (err ),
@@ -127,15 +137,15 @@ func (l *Logger) Warn(err error) {
127137}
128138
129139func (l * Logger ) Warnf (format string , args ... interface {}) {
130- l .handler .Log (logrus .WarnLevel , fmt .Sprintf (format , args ... ))
140+ l .defaultHandler .Log (logrus .WarnLevel , fmt .Sprintf (format , args ... ))
131141}
132142
133143func (l * Logger ) Error (err error ) {
134144 if err == nil {
135145 return
136146 }
137147
138- l .handler .WithFields (logrus.Fields {
148+ l .errorHandler .WithFields (logrus.Fields {
139149 "code" : errors .GetCode (err ),
140150 "severity" : errors .GetSeverity (err ),
141151 "short-description" : errors .GetSDescription (err ),
@@ -145,15 +155,15 @@ func (l *Logger) Error(err error) {
145155}
146156
147157func (l * Logger ) Errorf (format string , args ... interface {}) {
148- l .handler .Log (logrus .ErrorLevel , fmt .Sprintf (format , args ... ))
158+ l .errorHandler .Log (logrus .ErrorLevel , fmt .Sprintf (format , args ... ))
149159}
150160
151161func (l * Logger ) Fatal (err error ) {
152162 if err == nil {
153163 return
154164 }
155165
156- l .handler .WithFields (logrus.Fields {
166+ l .errorHandler .WithFields (logrus.Fields {
157167 "code" : errors .GetCode (err ),
158168 "severity" : errors .GetSeverity (err ),
159169 "short-description" : errors .GetSDescription (err ),
@@ -164,18 +174,23 @@ func (l *Logger) Fatal(err error) {
164174}
165175
166176func (l * Logger ) Fatalf (format string , args ... interface {}) {
167- l .handler .Log (logrus .FatalLevel , fmt .Sprintf (format , args ... ))
177+ l .errorHandler .Log (logrus .FatalLevel , fmt .Sprintf (format , args ... ))
168178 os .Exit (1 )
169179}
170180
171181func (l * Logger ) SetLevel (level logrus.Level ) {
172- l .handler .Logger .SetLevel (level )
182+ l .defaultHandler .Logger .SetLevel (level )
183+ l .errorHandler .Logger .SetLevel (level )
173184}
174185
175186func (l * Logger ) GetLevel () logrus.Level {
176- return l .handler .Logger .GetLevel ()
187+ return l .defaultHandler .Logger .GetLevel ()
177188}
178189
179190func (l * Logger ) UpdateLogOutput (output io.Writer ) {
180- l .handler .Logger .SetOutput (output )
191+ l .defaultHandler .Logger .SetOutput (output )
192+ }
193+
194+ func (l * Logger ) UpdateErrorLogOutput (output io.Writer ) {
195+ l .errorHandler .Logger .SetOutput (output )
181196}
0 commit comments