views:

45

answers:

1

I have 3 appenders in my config file for creating 3 different types of logs. I am using dynamic naming of file in each of the 3 appenders by setting the global context properties. In some cases, i need to set the log file name dynamically for just 1 appender.
When i set the file name for just 1 appender, it creates another file named "null" with no data in addition to the actual logfile whose name has been set dynamically. I have created the config file as shown.

<appender name="RollingFileAppenderV1" type="log4net.Appender.RollingFileAppender">   
<file type="log4net.Util.PatternString" value="Logs\%property{applog}" /> 
.
.
.
<appender name="RollingFileAppenderV2" type="log4net.Appender.RollingFileAppender"> 
<file type="log4net.Util.PatternString" value="Logs\%property{dblog}" />
.
.
.
<logger name="Logger1"> 
<level value="DEBUG" /> 
<appender-ref ref="RollingFileAppenderV1" /> 
</logger> 
<logger name="Logger2"> 
<level value="DEBUG" /> 
<appender-ref ref="RollingFileAppenderV2" /> 
</logger> 

In the VB.NET code i set the filename as :

log4net.GlobalContext.Properties("applog") = "file1.log"  
Dim logobj as log4net.Ilog = LogManager.GetLogger("Logger1")   
logobj.debug("test") 

In this case it creates "file1.log" and also another empty file with name as "null". This happens only when i am setting either of the appenders filename at runtime. Any help appreciated.

A: 

As far as I know the log file is created the moment you configure log4net. This means that you need to make sure to set the property first and configure log4net afterwards.

e.g.

log4net.GlobalContext.Properties["applog"] = "file1.log"
log4net.Config.XmlConfigurator.Configure();
Martin