@@ -6,7 +6,7 @@ package dazl
6
6
7
7
import (
8
8
"fmt"
9
- "os "
9
+ "io "
10
10
"runtime"
11
11
"strings"
12
12
"sync"
@@ -107,8 +107,8 @@ func getCallerPackage() (string, bool) {
107
107
return pkg , true
108
108
}
109
109
110
- func configure (framework Framework , config loggingConfig ) error {
111
- context , err := newLoggingContext (framework , config )
110
+ func configure (framework Framework , config loggingConfig , opener func ( path string ) (io. Writer , error ) ) error {
111
+ context , err := newLoggingContext (framework , config , opener )
112
112
if err != nil {
113
113
return err
114
114
}
@@ -230,7 +230,7 @@ func newLogger(context *loggingContext, parent *dazlLogger, name string) (*dazlL
230
230
return logger , nil
231
231
}
232
232
233
- func newLoggingContext (framework Framework , config loggingConfig ) (* loggingContext , error ) {
233
+ func newLoggingContext (framework Framework , config loggingConfig , opener func ( path string ) (io. Writer , error ) ) (* loggingContext , error ) {
234
234
encoders := make (map [Encoding ]Encoder )
235
235
if consoleEncodingFramework , ok := framework .(ConsoleEncodingFramework ); ok {
236
236
encoder , err := configureConsoleEncoder (config .Encoders .Console , consoleEncodingFramework .ConsoleEncoder ())
@@ -250,12 +250,14 @@ func newLoggingContext(framework Framework, config loggingConfig) (*loggingConte
250
250
framework : framework ,
251
251
config : config ,
252
252
encoders : encoders ,
253
+ opener : opener ,
253
254
}, nil
254
255
}
255
256
256
257
type loggingContext struct {
257
258
framework Framework
258
259
config loggingConfig
260
+ opener func (path string ) (io.Writer , error )
259
261
encoders map [Encoding ]Encoder
260
262
writers sync.Map
261
263
mu sync.Mutex
@@ -294,7 +296,11 @@ func (c *loggingContext) newWriter(name string) (Writer, error) {
294
296
if ! ok {
295
297
return nil , fmt .Errorf ("%s framework does not support %s encoding" , c .framework .Name (), c .config .Writers .Stdout .Encoder )
296
298
}
297
- return encoder .NewWriter (os .Stdout )
299
+ writer , err := c .opener ("stdout" )
300
+ if err != nil {
301
+ return nil , err
302
+ }
303
+ return encoder .NewWriter (writer )
298
304
case "stderr" :
299
305
if c .config .Writers .Stderr == nil {
300
306
return nil , fmt .Errorf ("'%s' writer is not configured" , name )
@@ -303,21 +309,25 @@ func (c *loggingContext) newWriter(name string) (Writer, error) {
303
309
if ! ok {
304
310
return nil , fmt .Errorf ("%s framework does not support %s encoding" , c .framework .Name (), c .config .Writers .Stderr .Encoder )
305
311
}
306
- return encoder .NewWriter (os .Stderr )
312
+ writer , err := c .opener ("stderr" )
313
+ if err != nil {
314
+ return nil , err
315
+ }
316
+ return encoder .NewWriter (writer )
307
317
default :
308
318
config , ok := c .config .Writers .getFile (name )
309
319
if ! ok {
310
320
return nil , fmt .Errorf ("'%s' writer is not configured" , name )
311
321
}
312
- file , err := os . OpenFile (config .Path , os . O_APPEND | os . O_CREATE | os . O_WRONLY , 0666 )
322
+ writer , err := c . opener (config .Path )
313
323
if err != nil {
314
324
return nil , err
315
325
}
316
326
encoder , ok := c .encoders [config .Encoder ]
317
327
if ! ok {
318
328
return nil , fmt .Errorf ("%s framework does not support %s encoding" , c .framework .Name (), config .Encoder )
319
329
}
320
- return encoder .NewWriter (file )
330
+ return encoder .NewWriter (writer )
321
331
}
322
332
}
323
333
0 commit comments