ViV
ViV

Reputation: 2118

Log4Net and multiple log files

There are several posts on the internet for the same topic and I am also able to write multiple log files from my Windows Forms App. But my requirement is slightly different.

My app has two modes of running, say like "BuySomething" mode & "SellSomeOtherThing" mode. And when it is in "BuySomething" mode I want to write to Log_BuySomething.txt and to Log_SellSomeOtherThing.txt otherwise (one mode will be selected for sure).

In the app.config file, I have the same structure as in the last post of a StackOverflow Question.
My problem is that, when the code XmlConfigurator.Configure(); is executed, it creates empty log files of the names mentioned in both LogFileAppenders in the app.config file. I thought the following code would solve it, but it didn't:

if (mode == BuySomeThing)
{
    logger = LogManager.GetLogger("LogFileAppender1");
}
else
{
    LogManager.GetLogger("LogFileAppender2");
}
XmlConfigurator.Configure();

How can I make sure that only the appropriate log file is created for that instance of the App?

Upvotes: 1

Views: 1533

Answers (1)

sgmoore
sgmoore

Reputation: 16067

If I understand you, your app doesn't switch between modes.

If so, then I would suspect that using your code will create both files, but only actually write to one.

If getting rid of the zero-byte file is important you could try something like:

log4net.GlobalContext.Properties["MyLogFileName"] = 
   (mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ;

XmlConfigurator.Configure();

You also need to change your config file to only have one appender and tell it to use this property for the file name, e.g.

<appender name="FileAppender" type="log4net.Appender.FileAppender">
   <file type="log4net.Util.PatternString" value="Logfiles\%property{MyLogFileName}" />

    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

This should end up creating just one file. (In this example it will be created in the folder logfiles).

Upvotes: 1

Related Questions