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:,,,

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

New on Geeks with Blogs