I recently had the need to set the output path of the log files at runtime in log4net. For some reason up until now I had never attempted to accomplish this. As corporate permissions are more and more restrictive I found the need to set the FileAppender.File path at runtime to a location within the users profile. It turns out accomplishing this task is quite simple.
public static void Initialize(string logDirectory)
{
//get the current logging repository for this application
ILoggerRepository repository = LogManager.GetRepository();
//get all of the appenders for the repository
IAppender[] appenders = repository.GetAppenders();
//only change the file path on the 'FileAppenders'
foreach (IAppender appender in (from iAppender in appenders
where iAppender is FileAppender
select iAppender))
{
FileAppender fileAppender = appender as FileAppender;
//set the path to your logDirectory using the original file name defined
//in configuration
fileAppender.File = Path.Combine(logDirectory, Path.GetFileName(fileAppender.File));
//make sure to call fileAppender.ActivateOptions() to notify the logging
//sub system that the configuration for this appender has changed.
fileAppender.ActivateOptions();
}
}
HTH - Wil