in log/rollwriter/roll_writer.go [71:105]
func NewRollWriter(filePath string, opt ...Option) (*RollWriter, error) {
opts := &Options{
MaxSize: 0, // default no rolling by file size
MaxAge: 0, // default no scavenging on expired logs
MaxBackups: 0, // default no scavenging on redundant logs
Compress: false, // default no compressing
}
// opt has the highest priority and should overwrite the original one.
for _, o := range opt {
o(opts)
}
if filePath == "" {
return nil, errors.New("invalid file path")
}
pattern, err := strftime.New(filePath + opts.TimeFormat)
if err != nil {
return nil, errors.New("invalid time pattern")
}
w := &RollWriter{
filePath: filePath,
opts: opts,
pattern: pattern,
currDir: filepath.Dir(filePath),
}
if err := os.MkdirAll(w.currDir, 0755); err != nil {
return nil, err
}
return w, nil
}