【发布时间】:2010-11-12 23:58:56
【问题描述】:
我想将文件命名为例如:
dd.mm.yyyy.log
log4net 怎么可能?
【问题讨论】:
标签: c# logging log4net filenames
我想将文件命名为例如:
dd.mm.yyyy.log
log4net 怎么可能?
【问题讨论】:
标签: c# logging log4net filenames
<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>
【讨论】:
在您的 Log4net 配置文件中,将以下参数与 RollingFileAppender 一起使用:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
【讨论】:
<preserveLogFileNameExtension value="true" /> 是正确的语法,这是一个很好的答案。请问损失是怎么发生的?
对于 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),因为它被描述为 here
使用 Log4Net 1.2.13,我们使用以下配置设置来允许文件名中包含日期时间。
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
它将按照以下约定提供文件:logname-2015-04-17.txt
有了这个,通常最好有以下内容,以确保您每天持有 1 个日志。
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
如果文件大小是一个问题,以下允许 500 个大小为 5MB 的文件,直到新的一天产生。 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 值设置为false。
将rollingStyle属性值设置为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" ?什么是生效日期模式?
上一个响应中的扩展配置部分
...
...
<rollingStyle value="Composite" />
...
...
列出的作品,但我不必使用
<staticLogFileName value="false" />
。我认为 RollingAppender 必须(逻辑上)忽略该设置,因为根据定义,文件每天都会在应用程序重新启动/重用时重建。也许每次应用程序启动时立即翻转确实很重要。
【讨论】:
我将配置移至代码,以便使用系统变量从 CI 轻松修改。我将此代码用于文件名,结果是'Log_03-23-2020.log'
log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
Hierarchy hierarchy = (Hierarchy)repository;
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = "Log_";
roller.DatePattern = "MM-dd-yyyy'.log'";
roller.Layout = patternLayout;
roller.MaxFileSize = 1024*1024*10;
roller.MaxSizeRollBackups = 10;
roller.StaticLogFileName = false;
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
【讨论】: