log4net中的FileAppender和RollingFileAppender中的变量文件名

时间:2019-07-11 11:54:45

标签: log4net rollingfileappender fileappender

我试图使用log4net.Util.PatternString使用log4net登录到具有变量名的文件。 附加程序配置如下所示:

<appender name="file2" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_PID%processid.log" /> 
    <appendToFile value="true" />       
    <layout type="log4net.Layout.PatternLayout">        
        <conversionPattern value="%date [%thread] %level - %message%newline" />
    </layout>
</appender>

使用此配置,文件成功创建,其名称如下所示: MyLogFile_PID12345.log

我已成功使用%processid,%random {8},%env {SOME_ENV_VAR},%property {MYPROPERTY}和%appsetting {someKey}。

但是我想要插入一个日期,无论我尝试什么,似乎我都无法理解它: %date,%utcdate,%date {DATE},%utcdate {DATE},%date {ISO8601},%date {ABSOLUTE},%date {{HH:mm:ss} 或基本上任何形式的日期。

例如,什么地方出了错?

<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{ISO8601}.log" />

我还尝试了使用单独的节点进行转换模式配置,但无济于事:

<file type="log4net.Util.PatternString">
    <conversionPattern value="c:\temp\MyLogFile_%date{ISO8601}.log" />
</file>

现在,我正在使用自定义属性(具有%property {MY_CUSTOM_PROPERTY_WITH_THE_NAME_I_WANT})来实现类似的效果,但是除了有些过分的外,我想知道我在做什么错。我曾在不同的计算机和不同的应用程序中尝试过,但我无法实现预期的目标。

顺便说一句,我的真正目的是在RollingFileAppender中使用它,但出于简单起见,我在这里询问(并尝试)有关FileAppender。

有帮助吗?

2 个答案:

答案 0 :(得分:0)

我看到您直接使用类型log4net.Util.PatternString代替了附加程序log4net.Appender.FileAppender,这有任何具体原因吗?

我只是看https://logging.apache.org/log4net/release/config-examples.html

中的示例

答案 1 :(得分:0)

我终于明白了!

似乎唯一可行的方法是指定日期格式字符串,并其中不带':'

尽管在https://logging.apache.org/log4net/release/sdk/index.html中使用了%date {HH:mm:ss,fff},%date {dd MMM yyyy HH:mm:ss,fff},%date {ISO8601},%的示例日期{ABSOLUTE}他们似乎都不起作用!

但这(和类似的)终于做到了:

<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{yyyy-MM-dd_HH-mm-ss}.log" />

如果我做错了什么,或者文档简直令人困惑,我仍在挠头。

我认为这与以下事实有关:Linux文件名中允许使用字符':',但Windows不允许(我使用Windows,因为我有90%以上的log4net用户,猜测)。而且ISO8601和ABSOLUTE都不起作用,因为在两种情况下,log4net都会将它们转换为带有':'的字符串,但由于相同的原因而失败。

如果这是真的,那么作为.NET(在Windows系统中大量使用的框架)的记录器,我认为这是他们应该牢记的。

问题已解决(尽管有一些疑问)。