【发布时间】:2011-05-18 01:32:42
【问题描述】:
最近我一直在从事一个项目,除其他外,我们希望提供一个集中的配置系统。我们正在使用 WCF、Silverlight、C# 等来创建服务和客户端的分布式系统。我们要配置的一件事是日志记录。显然,我们可以通过 app.config 或单独的日志配置文件来配置 log4net 或 NLog。我们也可以通过代码进行配置。我想看看是否可以通过代码通过 XML 进行配置。换句话说,假设您在内存中(可能从数据库中读取?)配置任一日志框架所需的整个 XML。可以做到吗?是否可以通过包含正确格式(在特定日志框架的上下文中)的字符串来配置 log4net 和/或 NLog,而不是从文件中读取或通过“常规”API 配置?
我已经弄清楚如何为这些日志框架中的每一个做到这一点。我不确定我们是否会真正使用它,但我想我会在 SO 上分享它,以防其他人发现它有用。此外,请随意评论以这种方式配置日志框架是否可取。
我能想到的两个明显的潜在问题是:
可能很难构造有效的 XML(或将其输入数据库)。我的第一个猜测是,人们会像今天一样定义 XML。将其放入 app.config(或外部配置)文件中,然后运行测试程序以验证 XML 是否产生预期结果。
更新数据库中的 XML 并让程序/服务/任何东西对更改做出反应(例如使用 log4net 的 ConfigureAndWatch 选项)是容易还是困难(或不可能)?我对程序或服务如何知道 XML 已更新的机制不感兴趣。让我们假设程序会定期检查数据库。给定一个新的 XML 字符串,重新配置日志框架很容易。
我将发布我的技术作为这个问题的答案。
【问题讨论】:
-
找到的解决方案 here 更干净。