0

我正在尝试使用 log4net 使用 log4net.Util.PatternString 登录到具有变量名的文件。appender 配置如下所示:

<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。

有什么帮助吗?

4

2 回答 2

1

我看到您直接使用类型 log4net.Util.PatternString 而不是附加程序 log4net.Appender.FileAppender,有什么具体原因吗?

我只是在查看https://logging.apache.org/log4net/release/config-examples.html中的示例

于 2019-07-11T12:13:43.037 回答
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}, %date{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 系统中大量使用的框架,我认为这是他们应该考虑的事情。

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

于 2019-07-11T18:44:29.793 回答