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 <[EMAIL PROTECTED]>

To: log4net-user@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 

  







Reply via email to