Search
Close this search box.

Setting log4net FileAppender.File at runtime

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

Technorati Tags: .NET,C#,log4net,Diagnostics

This article is part of the GWB Archives. Original Author: Wil Peck

Related Posts