You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Radovan Raszka <ra...@hasam.cz> on 2007/07/27 08:23:05 UTC

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


RE: Disable/enable appender for all loggers

Posted by "Vanderkolk, John" <Jo...@compuware.com>.
I would do something like this:

 

      log4net.Appender.IAppender[] appenders =
log4net.LogManager.GetRepository().GetAppenders();

 

      for (int i = 0; i < appenders.Length; ++i)

      {

            Log4net.Appender.FileAppender appender = appenders[i] as
log4net.Appender.FileAppender;

            if (appender != null && appender.Name == "RollingFile")

                  appender.Threshold = log4net.Core.Level.Off;

      }

 

Or if you want to turn all File Appenders you can take out the ' &&
appender.Name == "RollingFile"'.

 

John VanderKolk 

From: Radovan Raszka [mailto:raszka@hasam.cz] 
Sent: Friday, July 27, 2007 2:23 AM
To: log4net-user@logging.apache.org
Subject: 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
The contents of this e-mail are intended for the named addressee only. It contains information that may be confidential. Unless you are the named addressee or an authorized designee, you may not copy or use it, or disclose it to anyone else. If you received it in error please notify us immediately and then destroy it.