in log/zaplogger.go [144:177]
func newFileCore(c *OutputConfig) (zapcore.Core, zap.AtomicLevel, error) {
opts := []rollwriter.Option{
rollwriter.WithMaxAge(c.WriteConfig.MaxAge),
rollwriter.WithMaxBackups(c.WriteConfig.MaxBackups),
rollwriter.WithCompress(c.WriteConfig.Compress),
rollwriter.WithMaxSize(c.WriteConfig.MaxSize),
}
// roll by time.
if c.WriteConfig.RollType != RollBySize {
opts = append(opts, rollwriter.WithRotationTime(c.WriteConfig.TimeUnit.Format()))
}
writer, err := rollwriter.NewRollWriter(c.WriteConfig.Filename, opts...)
if err != nil {
return nil, zap.AtomicLevel{}, err
}
// write mod.
var ws zapcore.WriteSyncer
if c.WriteConfig.WriteMode == WriteSync {
ws = zapcore.AddSync(writer)
} else {
dropLog := c.WriteConfig.WriteMode == WriteFast
ws = rollwriter.NewAsyncRollWriter(writer,
rollwriter.WithDropLog(dropLog),
)
}
// log level.
lvl := zap.NewAtomicLevelAt(Levels[c.Level])
return zapcore.NewCore(
newEncoder(c),
ws, lvl,
), lvl, nil
}