Ron Grabowski
2007-08-03 02:51:36 UTC
Instead of removing the appender you could just set its threshold to OFF then when you want to enable it again you can set it back to DEBUG:
// untested
public static void SetThreshold(string appenderName, Level threshold)
{
foreach (AppenderSkeleton appender in LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
appender.Threshold = threshold;
appender.ActivateOptions();
break;
}
}
}
----- Original Message ----
From: Radovan Raszka <***@hasam.cz>
To: log4net-***@logging.apache.org
Sent: Friday, July 27, 2007 2:23:05 AM
Subject: Disable/enable appender for all loggers
Disable/enable appender for all loggers Hello,
I am using three appenders in my log4net configuration (see bellow). But I need programatically disable and reenable RollingFile appender at certain situations. Is there any simple solution? I tried to use programatic configuration only.
My config:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%date{HH:mm:ss,fff} %5level [%thread] %message%n" />
</layout>
<Threshold value="DEBUG" />
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<appendToFile value="true" />
<file value="Service.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n" />
</layout>
<rollingStyle value="Date" />
<Threshold value="DEBUG" />
</appender>
<appender name="EvLog" type="log4net.Appender.EventLogAppender">
<ApplicationName value="IPserver" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread] %message (%logger{1})" />
</layout>
<Threshold value="INFO" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
<appender-ref ref="EvLog" />
</root>
</log4net>
I tried to complete rewrite this config into C# code:
private readonly log4net.Appender.ConsoleAppender AppConsole;
private readonly log4net.Appender.RollingFileAppender AppFile;
private readonly log4net.Appender.EventLogAppender AppEvlog;
private log4net.Repository.Hierarchy.RootLogger rootLog;
//XmlConfigurator.Configure(new System.IO.FileInfo(IPserverCore.IPserver.GetAppPath() + "log4net.config"));
//xml configurator replaced by code
AppConsole = new log4net.Appender.ConsoleAppender();
AppConsole.Layout = new log4net.Layout.PatternLayout("%date{HH:mm:ss,fff} %5level [%thread] %message%n");
AppConsole.Threshold = log4net.Core.Level.Debug;
AppFile = new log4net.Appender.RollingFileAppender();
AppFile.AppendToFile = true;
AppFile.Layout = new log4net.Layout.PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n");
AppFile.File = "Service.log";
AppFile.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
AppFile.Threshold = log4net.Core.Level.Debug;
AppEvlog = new log4net.Appender.EventLogAppender();
AppEvlog.Layout = new log4net.Layout.PatternLayout("[%thread] %message (%logger{1})");
AppEvlog.ApplicationName = "IPserver";
AppEvlog.Threshold = log4net.Core.Level.Info;
rootLog = new log4net.Repository.Hierarchy.RootLogger(log4net.Core.Level.Info);
rootLog.AddAppender(AppConsole);
rootLog.AddAppender(AppFile);
rootLog.AddAppender(AppEvlog);
//----
log = LogManager.GetLogger(typeof(IPservice));
Log.Info("Start"); // no log produced here...
rootLog.RemoveAppender(AppFile); // disable file logging
...
But after rewriting aplication doesn't create any logs….
Did I miss some settings or am I complete wrong?
Thanks for any suggestions
Radovan Raszka
// untested
public static void SetThreshold(string appenderName, Level threshold)
{
foreach (AppenderSkeleton appender in LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
appender.Threshold = threshold;
appender.ActivateOptions();
break;
}
}
}
----- Original Message ----
From: Radovan Raszka <***@hasam.cz>
To: log4net-***@logging.apache.org
Sent: Friday, July 27, 2007 2:23:05 AM
Subject: Disable/enable appender for all loggers
Disable/enable appender for all loggers Hello,
I am using three appenders in my log4net configuration (see bellow). But I need programatically disable and reenable RollingFile appender at certain situations. Is there any simple solution? I tried to use programatic configuration only.
My config:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%date{HH:mm:ss,fff} %5level [%thread] %message%n" />
</layout>
<Threshold value="DEBUG" />
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<appendToFile value="true" />
<file value="Service.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n" />
</layout>
<rollingStyle value="Date" />
<Threshold value="DEBUG" />
</appender>
<appender name="EvLog" type="log4net.Appender.EventLogAppender">
<ApplicationName value="IPserver" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread] %message (%logger{1})" />
</layout>
<Threshold value="INFO" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
<appender-ref ref="EvLog" />
</root>
</log4net>
I tried to complete rewrite this config into C# code:
private readonly log4net.Appender.ConsoleAppender AppConsole;
private readonly log4net.Appender.RollingFileAppender AppFile;
private readonly log4net.Appender.EventLogAppender AppEvlog;
private log4net.Repository.Hierarchy.RootLogger rootLog;
//XmlConfigurator.Configure(new System.IO.FileInfo(IPserverCore.IPserver.GetAppPath() + "log4net.config"));
//xml configurator replaced by code
AppConsole = new log4net.Appender.ConsoleAppender();
AppConsole.Layout = new log4net.Layout.PatternLayout("%date{HH:mm:ss,fff} %5level [%thread] %message%n");
AppConsole.Threshold = log4net.Core.Level.Debug;
AppFile = new log4net.Appender.RollingFileAppender();
AppFile.AppendToFile = true;
AppFile.Layout = new log4net.Layout.PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n");
AppFile.File = "Service.log";
AppFile.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
AppFile.Threshold = log4net.Core.Level.Debug;
AppEvlog = new log4net.Appender.EventLogAppender();
AppEvlog.Layout = new log4net.Layout.PatternLayout("[%thread] %message (%logger{1})");
AppEvlog.ApplicationName = "IPserver";
AppEvlog.Threshold = log4net.Core.Level.Info;
rootLog = new log4net.Repository.Hierarchy.RootLogger(log4net.Core.Level.Info);
rootLog.AddAppender(AppConsole);
rootLog.AddAppender(AppFile);
rootLog.AddAppender(AppEvlog);
//----
log = LogManager.GetLogger(typeof(IPservice));
Log.Info("Start"); // no log produced here...
rootLog.RemoveAppender(AppFile); // disable file logging
...
But after rewriting aplication doesn't create any logs….
Did I miss some settings or am I complete wrong?
Thanks for any suggestions
Radovan Raszka