这是我的 log4net 配置,滚动日志文件创建的扩展名错误。第一个文件使用 log_debug.txt 名称创建,滚动文件使用 log_debug.txt.1 创建。但理想情况下它应该是 log_debug.1.txt。
我使用preserveLogFileNameExtension值为true,但它似乎不起作用。您能检查一下,如果有什么问题请告诉我吗?
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="DEBUG" />
</filter>
<file value=".\logs\log_debug.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="20" />
<maximumFileSize value="2MB" />
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="true" />
<layout type="propertyPatternLayout">
<conversionPattern value="%date || Thread=%thread" />
</layout>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
我的第一个答案(如下)基于 log4net v1.2.10,我被轻轻地催促到 v1.2.13 版本,该版本does包含preserveLogFileNameExtension
。一些测试证实该属性也按预期工作,并且不依赖于staticLogFilename
财产。
我认为 OP 使用的是 log4net 的早期版本,它不包含该属性,因此表现出下面描述的行为(IMO 上making3 和 Sivakumar 评论就在现场)
再次感谢您将我从 1.2.10 的困境中唤醒。
初步答复
首先第一件事:没有preserveLogFileNameExtension
财产为RollingFileAppender
(或任何附加程序)在 vanilla log4net 中(我正在查看版本 1.2.10.0)。大多数 log4net 组件将使用您发送给他们的任何属性配置而不会抱怨,但它不一定会转化为组件中的行为
当按大小(或复合)滚动时,会发生滚动被硬编码以在日志文件中添加迭代编号的后缀。您将始终得到一个“file.log.n”,其中 n 与下一个文件编号匹配(这取决于您的maxSizeRollBackups
and countDirection
值)。当前的情况无法避免这种情况RollingFileAppender
(看看RollingFileAppender.RollOverRenameFiles
method)
该怎么办?您可以决定按日期滚动。在这种情况下,可以使用datePattern
财产。这datePattern
滚动时附加到文件名,因此您可以使用类似的内容
<file value="file.log" />
<datePattern value=".yyyy-MM-dd-hh-mm-ss'.log'" />
这将保留扩展名并创建一个类似的文件file.log.2014-12-11-11-47-54.log
(请参阅文件名中的原始 .log 扩展名)。但你正在失去尺寸限制。如果你选择 Composite,你也会遇到同样的问题;自从RollOverSize
总是发生在RollOverDate
将出现号码前缀。
您还可以决定使用您想要/需要的命名约定来推出(啊啊)您自己的附加程序。你甚至可以尝试从香草继承RollingFileAppender
并且只覆盖必要的方法。AdjustFileBeforeAppend
是虚拟的,是所有展期需求的起点;例如,您可以尝试将呼叫反转RollOverDate
and RollOverSize
使用复合模式...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)