Ada
Ada

Reputation: 261

Variable filename in FileAppender and RollingFileAppender in log4net

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

Answers (2)

Ada
Ada

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

Sivu47
Sivu47

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

Related Questions