tags:

views:

109

answers:

2

Is it possible to have log4net put its log files relative to the current working directory instead of the directory where the application resides?

In other words, if I run ..\myapp.exe, I don't want the log files in ..\ I want them in .\

+1  A: 

Not possible from the config file, as per here. It may be possible if you are configuring it manually from inside your program though:

public static log4net.Appender.IAppender CreateFileAppender(string name,
string fileName)
{
  log4net.Appender.FileAppender appender = new
log4net.Appender.FileAppender();
  appender.Name = name;
  appender.File = fileName;
  appender.AppendToFile = true;

  log4net.Layout.PatternLayout layout = new
log4net.Layout.PatternLayout();
  layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
  layout.ActivateOptions();

  appender.Layout = layout;
  appender.ActivateOptions();

  return appender;
}

You can then associate it with the logger as follows:

AddAppender("Log4net.MainForm", CreateFileAppender("FileAppender",   
Path.Combine(Directory.GetCurrentDirectory(), "foo.log")));
Otávio Décio
That confirms what I was thinking. I posted my own answer with a pretty easy way to make it configurable.
kiko
A: 

I ended up looking at the log4net source and determined I can implement my own appender that extends FileAppender and overrides the File property.

class CWDFileAppender : FileAppender
{
    public override string File
    {
        set
        {
            base.File = Path.Combine(Directory.GetCurrentDirectory(), value);
        }
    }
}

I just use CWDFileAppender in my configuration.

kiko
Hey kiko, put such updates in your answer. keeps the thread clean, unless you have the correct answer to your own question...
Peter Lillevold
This is the "correct" answer to my own question.
kiko