如何启用/禁用ASP.NET上的日志记录

时间:2010-09-15 12:48:59

标签: asp.net logging

我正在尝试在我的ASP.NET网站中创建一个设置,允许我在应用程序运行的任何时候启用/禁用日志记录。我想你们中的一些人已经做过这样的事了。

以下是我要做的事情的要点:

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

那么如何在网站运行时设置布尔值ShouldBeLogging以便能够打开/关闭而不会出现任何严重的性能缺陷(看看它将如何频繁访问)?

我正在考虑在web.config中添加一些东西,但如果我想打开它,那么不会改变我的用户会话吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

是的,对web.config的更改将导致应用程序自行重启,会话将丢失,具体取决于您的会话存储。

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

为什么不使用已经可外部配置的Enterprise Library Logging Application Block?您正在尝试做的参考将在Checking Filter Status before Logging

如果您确定要切换日志记录,请检查一个简单的伪解决方案是向您的web.config appSettings添加值

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

然后在你的全球网页中       public static readonly Boolean LoggingEnabled {get;}

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

答案 1 :(得分: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>

答案 2 :(得分:0)

我决定选择支持这一功能的log4net。您可以在assemblyinfo.cs中添加一行,如:

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

将告诉它观看配置文件的更改。然后你可以在程序执行期间的任何时候在config xml中设置level节点,只要你在代码中使用以下检查,就会打开/关闭日志:

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

请参阅http://logging.apache.org/log4net/release/manual/internals.html了解详情。