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