我正在尝试在我的ASP.NET网站中创建一个设置,允许我在应用程序运行的任何时候启用/禁用日志记录。我想你们中的一些人已经做过这样的事了。
以下是我要做的事情的要点:
if(ShouldBeLogging)
logger.Info("helloooooo there");
那么如何在网站运行时设置布尔值ShouldBeLogging以便能够打开/关闭而不会出现任何严重的性能缺陷(看看它将如何频繁访问)?
我正在考虑在web.config中添加一些东西,但如果我想打开它,那么不会改变我的用户会话吗?
谢谢!
答案 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了解详情。