我希望文件能够以如下格式命名:
dd.mm.yyyy.log
请问log4net如何实现该功能?
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
”是正确的语法,这是一个好的答案。我可以问一下为什么会出现损失吗? - Larry Beasley对于RollingLogFileAppender,您还需要这些元素和值:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
最终我使用了(请注意'.log'文件名以及单引号括起来的'myfilename_'):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
这给了我:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
对于早期版本的 log4net(例如 v1.2.10)无效,如此处所述:[https://dev59.com/kIXca4cB1Zd3GeqPMrtc]。 - Dmitry Karpenko使用Log4Net 1.2.13时,我们使用以下配置设置允许在文件名中包含日期时间:
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
这将提供以下格式的文件:logname-2015-04-17.txt
通常最好使用以下设置以确保每天只保存一个日志文件。
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
如果文件大小是一个问题,以下内容允许在新的一天产生之前,使用大小为5MB的500个文件。CountDirection允许对不再是当前的文件进行升序或降序编号。
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
我尝试了所有答案,但总是感觉缺少某些东西,并且不能按照我的预期运行。
后来,我在每个答案中给出的提示进行了一些实验,最终成功地使用了以下设置:
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="-yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
其他参数组合的问题在于最新的文件没有时间模式,或者时间模式附加为.log20171215
,这会每天创建一个新的文件时间(以及一个新的文件类型!)- 或者两个问题都出现了。
现在使用这个设置,你会得到像这样的文件:
LOG4NET_Sample_Activity-20171215.log
这就是我想要的。
总结一下:
不要将日期模式放在<file value=...
属性中,只需在datePattern
中定义它。
确保将preserveLogFileNameExtension
的value属性设置为true
。
确保将staticLogFileName
的value设置为false
。
将rollingStyle
属性的value设置为Date
。
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="30MB" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true"/>
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
%date{yyyyMM}
和 value="ddMMyyyy"
?哪一个是有效的日期格式? - Allan Ruin在之前的响应中,扩展配置部分为
...
...
<rollingStyle value="Composite" />
...
...
列出了作品,但我没有使用过
<staticLogFileName value="false" />
我认为RollingAppender必须(逻辑上)忽略该设置,因为按定义,每天应用程序重新启动/重用时文件都会被重建。也许对于每次应用程序启动的立即滚动记录,这确实很重要。
你的答案是将“rollingStyle value”更改为“Date”。其他方面看起来都很好。
<rollingStyle value="Date" />
诀窍在于隐藏这四个定义:
...
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
...
这是我的log4net配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Log4Net -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log_" />
<rollingStyle value="Date" />
<datePattern value="yyyy_MM_dd'.txt'"/>
<staticLogFileName value="false" />
<appendToFile value="true" />
<maxSizeRollBackups value="50" />
<maximumFileSize value="10MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level - %message%newline%exception" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="ERROR" />
<levelMin value="DEBUG" />
</filter>
</appender>
</log4net>
<!-- Log4Net -->
</configuration>
<datePattern value="'-'yyyy-MM-dd'.log'" />
这是我的追加器:
<appender name="testAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="ApplicationLog" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="'-'yyyy-MM-dd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
我的日志文件将被命名为:ApplicationLog-2022-11-04.log