2010-09-15 61 views
1

我试图在我的ASP.NET网站中创建一个安装程序,该安装程序允许我在任何时候运行应用程序时启用/禁用日志记录。我想你们中的一些人已经做了这样的事情。如何启用/禁用ASP.NET上的日志记录

这里是我想要做的要点:

if(ShouldBeLogging) 
logger.Info("helloooooo there"); 

那么你会如何建立布尔值ShouldBeLogging要能上,而该网站没有得到任何正在运行的开/关被打开严重的性能缺陷(看看它将如何频繁访问)?

我在考虑把东西放在web.config中,但是如果我想打开它,不会改变那个踢我的用户会话吗?

谢谢!

+0

关于最后一点 - 它取决于您使用的会话存储机制。如果你使用InProc(会话数据存储在内存中),那么是的。如果您使用像SQL数据库那样更持久的存储会话数据的内容,那么所有现有的用户会话都将在应用程序域重新启动时保留下来,这是由更改web.config引起的。 – Tomas 2010-09-15 12:58:06

回答

0

我决定去支持这一确切功能log4net的。你可以在你的assemblyinfo.cs中插入一行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "config\\log4net.config", Watch = true)] 

它会告诉它观察配置文件的变化。那么你就可以在程序执行期间的任何时间设置在配置XML的层次节点和日志记录将开/关,只要你使用以下检查你的代码打开:

if(log.IsDebugEnabled) 
    log.Debug("write a debug message to the logger"); 

http://logging.apache.org/log4net/release/manual/internals.html欲了解更多信息。

0

是的,对web.config的更改会导致应用程序自身重新启动,并且会话会因您的会话存储而丢失。

布尔检查的性能开销是最小的,但它是一个维护的噩梦。

为什么不使用Enterprise Library Logging Application Block,这已经是外部可配置的?一种你正在尝试做的如果你决定你真的会在这里Checking Filter Status before Logging

参考要切换记录如果通过检查一个简单的伪解决方案是将值添加到您的web.config的appSettings

<appSettings> 
    <add key="DiagnosticLogging" value="true" /> 
</appSettings> 

,然后在全球第 公共静态只读布尔LoggingEnabled {获得;}

Application_Start(..){ 
     string log = ConfigurationSettings.AppSettings["DiagnosticLogging"]; 
     LoggingEnabled = false; 
     if(!string.IsNullOrEmpty(log)){ 
      if(!boolean.TryParse(out LoggingEnabled)){ 
        //bad application setting.. handle 
       } 
     }  
    } 
0

诊断内置/跟踪可能是您的需求的最佳契合,即见 http://www.beansoftware.com/ASP.NET-Tutorials/Tracing-ASP.NET.aspx

样品的web.config:

<configuration> 
    <appSettings/> 
    <connectionStrings/> 
    <system.web> 
     <compilation debug="false" /> 
     <authentication mode="Windows" /> 
     <trace enabled ="true" pageOutput ="false" requestLimit ="20" traceMode ="SortByTime " /> 


</system.web>