一、环境
C# .net core 3.1; Linux 容器形式部署;
日志目录有挂载出来,忽略此原因;
二、背景
log4net配置如下,当容器重新创建(发布时),日志会被覆盖
三、问题复现
1、测试环境先产生3个info日志文件
2、重启容器
3、发现日志又以索引0开始写日志,这样原来的日志文件就依次被覆盖
4、本地启动应用也是一样,重启应用从索引0开始写日志
四、分析和排查
1、查看log4net源码,发现初始化索引是获取file配置指定目录下的日志文件截取索引。
2、file配置目录App_Data/Logs/,而我们的配置在datePattern又加了一层日期的目录(每天一个文件夹,因为日志有点多),所以在file的目录是获取不到已有的日志文件,解析不出最大的索引
<datePattern value="yyyyMMdd/'info-'yyyyMMdd'.log'" />
3、按照源码,我们将日期的目录加在file后面,照理就可以的
4、按照想象配置了一波
<file type="log4net.Util.PatternString" value="App_Data/Logs/%utcdate{yyyyMMdd}/" />
<datePattern value="'info-'yyyyMMdd'.log'" />
5、验证OK,不会重新覆盖了
后记
按照上面的处理,发现不会每天自动创建一个日期的文件夹。
还是改写RollingFileAppender解决;