我已经看到至少两种方法在ASP.NET Web应用程序中包含外部log4net配置文件:
在AssemblyInfo.cs文件中具有以下属性:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)
在Global.asax.cs中调用XmlConfigurator:
protected void Application_Start()
{
XmlConfigurator.Configure(new FileInfo("Log.config"));
}
Run Code Online (Sandbox Code Playgroud)
这样做的最佳做法是什么?
最近我一直致力于一个项目,其中包括我们想要提供一个集中配置系统.我们使用WCF,Silverlight,C#等来创建分布式服务和客户端系统.我们要配置的一件事是记录.显然,我们可以通过app.config或单独的日志配置文件配置log4net或NLog.我们也可以通过代码配置.我想看看是否可以通过代码从XML进行配置.换句话说,假设您在内存中(可能从数据库中读取?)配置任一日志框架所需的整个XML.可以吗?是否可以通过包含正确形成的字符串(在特定日志框架的上下文中)配置log4net和/或NLog,而不是从文件读取或通过"
我已经想出了如何为每个这些日志框架做到这一点.我不确定我们是否真的会使用它,但我认为我会在这里分享它,以防万一其他人可能会发现它有用.另外,请随意评论以这种方式配置日志框架的可行性(或不可行性).
我能想到的两个明显的潜在问题是:
构造有效的XML(或在数据库中输入)可能很困难.我的第一个猜测是,人们将以与今天相同的方式定义XML.将它放在app.config(或外部配置)文件中,然后运行测试程序以验证XML是否产生预期结果.
更新数据库中的XML然后让程序/服务/对变化作出反应(比如使用log4net的ConfigureAndWatch选项)是多么容易或困难(或不可能)?我对程序或服务如何知道XML已更新的机制不感兴趣.我们假设程序将定期检查数据库.给定一个新的XML字符串,很容易重新配置日志框架.
我将发布我的技术作为这个问题的答案.