I found a way to do this using repositories. I have written a class to encapsulate all the log4net configuration:
public class CustomLogger
{
private readonly ILog log;
public CustomLogger(string name)
{
var repository = LogManager.CreateRepository(name);
Hierarchy hierarchy = (Hierarchy)repository;
hierarchy.Root.RemoveAllAppenders(); //Remove any other appenders
RollingFileAppender fileAppender = new RollingFileAppender();
fileAppender.MaxFileSize = 10000000; //10MB in bytes
fileAppender.MaxSizeRollBackups = 10;
fileAppender.RollingStyle = RollingFileAppender.RollingMode.Size;
fileAppender.AppendToFile = true;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.File = @"C:\" + name + "_LOG.txt";
PatternLayout pl = new PatternLayout();
pl.ConversionPattern = "%utcdate,%message%newline";
pl.ActivateOptions();
fileAppender.Layout = pl;
fileAppender.ActivateOptions();
log4net.Config.BasicConfigurator.Configure(repository, fileAppender);
this.log = LogManager.GetLogger(name, name);
}
public void Log(string message)
{
this.log.Info(message);
}
}
Usage:
var logger1 = new CustomLogger("1111111");
var logger2 = new CustomLogger("2222222");
var logger3 = new CustomLogger("3333333");
logger1.Log("Test1");
logger2.Log("Test2");
logger3.Log("Test3");