Reputation: 261
I am trying to use log4net to log to a file with a variable name using log4net.Util.PatternString. The appender configuration looks like this:
<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>
With this configuration, the file is succesfully created with a name something like this: MyLogFile_PID12345.log
I have succesfully used %processid, %random{8}, %env{SOME_ENV_VAR}, %property{MYPROPERTY} and %appsetting{someKey}.
But what I want is to insert a date, and no matter what I try, it seems that I cannot make it understand any of: %date, %utcdate, %date{DATE}, %utcdate{DATE}, %date{ISO8601}, %date{ABSOLUTE}, %date{{HH:mm:ss} or basically any form of date.
For example, what is wrong in:
<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{ISO8601}.log" />
I have also tried to use a separate node for the conversion pattern configuration to no avail:
<file type="log4net.Util.PatternString">
<conversionPattern value="c:\temp\MyLogFile_%date{ISO8601}.log" />
</file>
Right now I am using a custom property (with %property{MY_CUSTOM_PROPERTY_WITH_THE_NAME_I_WANT}) to achieve a similar effect, but apart from being somewhat overkill, I wonder what I am doing wrong. I have tried in different computers and different applications and I cannot get what I intend.
By the way, my real aim is to use it in RollingFileAppender, but I am asking (and trying) here about FileAppender just for simplicity sake.
Any help?
Upvotes: 0
Views: 1447
Reputation: 261
I finally got it!
It seems the only way it works is specifying a date format string, and with NO ':' in it.
Despite the examples in https://logging.apache.org/log4net/release/sdk/index.html, where it uses %date{HH:mm:ss,fff}, %date{dd MMM yyyy HH:mm:ss,fff}, %date{ISO8601}, %date{ABSOLUTE} none of them seem to work!
But this (and similar ones) finally do:
<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{yyyy-MM-dd_HH-mm-ss}.log" />
I am still scratching my head if I was doing something wrong or the documentation is just plain confusing.
I think it has to do with the fact that the character ':' is allowed in Linux filenames, but not on Windows (I am using Windows, as 90+% of log4net users, I guess). And ISO8601 and ABSOLUTE don´t work either probably because in both cases log4net translates them to a string with ':' in it, failing for the same reasons.
If this is true, being a logger for .NET, a framework that is overwhelmingly used in Windows systems, I think this is something they should have in mind.
Problem solved (albeit with some doubts).
Upvotes: 0
Reputation: 21
I see you're using the type log4net.Util.PatternString directly instead of the appender log4net.Appender.FileAppender, any specific reason for that?
I'm just looking at the examples from https://logging.apache.org/log4net/release/config-examples.html
Upvotes: 1