Subject: RE: Disable/enable appender for all loggers - msg#00013

本文探讨了如何通过程序化方式控制log4net中特定appender的启用与禁用,特别是在需要动态改变日志级别的情况下。文章提供了具体的代码示例,展示了如何设置appender的阈值为OFF来禁用日志记录,并在需要时重新启用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Subject: RE: Disable/enable appender for all loggers -
msg#00013

List: log.log4net.user

log.log4net.user Navigation: 
Date:  Prev  Next  Date Index Thread:  Prev  Next  Thread Index

Website Performance Monitoring

Thanks for proposal to John and Ron, it works well.
But when I tried the reverse strategy (set Threshold to OFF in config file and 
change to DEBUG when needed), I noticed that empty log file (Service.log in my 
configuration) is created (file size = 0 bytes).
Can this feature be disabled?

I think it would be great to add some samples of programatic configuration into 
SDK documentation - current documentation is completely out of any example.
Radovan

________________________________

Od: Ron Grabowski [ mailto:rongrabowski@xxxxxxxxx]
Odesláno: pá 3.8.2007 4:51
Komu: Log4NET User
Předmět: Re: Disable/enable appender for all loggers



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 <raszka@xxxxxxxx>

To: log4net-user@xxxxxxxxxxxxxxxxxx

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

<<winmail.dat>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值