我试图使用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。
有帮助吗?
答案 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系统中大量使用的框架)的记录器,我认为这是他们应该牢记的。
问题已解决(尽管有一些疑问)。