1818package file
1919
2020import (
21+ "errors"
2122 "fmt"
2223 "os"
2324 "path/filepath"
2425 "sort"
2526 "strconv"
2627 "sync"
2728 "time"
28-
29- "errors"
3029)
3130
3231const (
@@ -55,6 +54,7 @@ type Rotator struct {
5554 triggers []trigger
5655
5756 filename string
57+ extension string
5858 maxSizeBytes uint
5959 maxBackups uint
6060 interval time.Duration
@@ -84,6 +84,14 @@ func MaxSizeBytes(n uint) RotatorOption {
8484 }
8585}
8686
87+ // Extension configures the file extension to use for the log file.
88+ // The default is "ndjson".
89+ func Extension (ext string ) RotatorOption {
90+ return func (r * Rotator ) {
91+ r .extension = ext
92+ }
93+ }
94+
8795// MaxBackups configures the maximum number of backup files to save (not
8896// counting the active file). The upper limit is 1024 on this value is.
8997// The default is 7.
@@ -142,6 +150,8 @@ func WithClock(clock clock) RotatorOption {
142150// NewFileRotator returns a new Rotator.
143151func NewFileRotator (filename string , options ... RotatorOption ) (* Rotator , error ) {
144152 r := & Rotator {
153+ filename : filename ,
154+ extension : "ndjson" ,
145155 maxSizeBytes : 10 * 1024 * 1024 , // 10 MiB
146156 maxBackups : 7 ,
147157 permissions : 0600 ,
@@ -168,7 +178,7 @@ func NewFileRotator(filename string, options ...RotatorOption) (*Rotator, error)
168178 return nil , errors .New ("the minimum time interval for log rotation is 1 second" )
169179 }
170180
171- r .rot = newDateRotater (r .log , filename , r .clock )
181+ r .rot = newDateRotater (r .log , filename , r .extension , r . clock )
172182
173183 shouldRotateOnStart := r .rotateOnStartup
174184 if _ , err := os .Stat (r .rot .ActiveFile ()); os .IsNotExist (err ) {
@@ -180,6 +190,7 @@ func NewFileRotator(filename string, options ...RotatorOption) (*Rotator, error)
180190 if r .log != nil {
181191 r .log .Debugw ("Initialized file rotator" ,
182192 "filename" , r .filename ,
193+ "extension" , r .extension ,
183194 "max_size_bytes" , r .maxSizeBytes ,
184195 "max_backups" , r .maxBackups ,
185196 "permissions" , r .permissions ,
@@ -408,12 +419,12 @@ type dateRotator struct {
408419 logOrderCache map [string ]logOrder
409420}
410421
411- func newDateRotater (log Logger , filename string , clock clock ) rotater {
422+ func newDateRotater (log Logger , filename , extension string , clock clock ) rotater {
412423 d := & dateRotator {
413424 log : log ,
414425 clock : clock ,
415426 filenamePrefix : filename + "-" ,
416- extension : ".ndjson" ,
427+ extension : "." + extension ,
417428 format : DateFormat ,
418429 logOrderCache : make (map [string ]logOrder ),
419430 }
0 commit comments