最近我在一个项目中工作,其中包括提供集中式配置系统。我们使用WCF、Silverlight、C#等创建分布式服务和客户端系统。其中一件需要配置的事情是日志记录。显然,我们可以通过app.config或单独的日志配置文件来配置log4net或NLog。我们也可以通过代码进行配置。我想看看是否可能通过XML从代码中进行配置。换句话说,想象一下,你在内存中(也许从数据库中读取?)拥有了配置任一日志框架所需的完整XML。它能做到吗?是否可以通过包含正确格式的字符串(在特定日志框架的上下文中)来配置log4net和/或NLog,而不是从文件中读取或通过“传统”的API配置?
我已经想出了如何为这些日志框架中的每一个进行配置。我不确定我们是否会真正使用它,但我想在这里与大家分享一下,以防其他人可能会发现它有用。此外,请随意评论使用此方式配置日志框架的可行性(或不可行性)。
我能想到的两个明显的潜在问题是:
1. 构建有效的XML可能很困难(或在数据库中输入)。我的第一个想法是,定义XML的方式与今天相同。将其放入app.config(或外部配置)文件中,然后运行测试程序以验证XML是否产生了预期的结果。 2. 更新数据库中的XML,然后使程序/服务/任何内容对更改做出反应(例如使用log4net的ConfigureAndWatch选项)可能会很容易或很困难(或不可能)。我对程序或服务如何知道XML已更新的机制不太感兴趣。让我们假设程序将定期检查数据库。鉴于新的XML字符串,重新配置日志框架就很容易。
我将把我的技术作为这个问题的答案发布。
我已经想出了如何为这些日志框架中的每一个进行配置。我不确定我们是否会真正使用它,但我想在这里与大家分享一下,以防其他人可能会发现它有用。此外,请随意评论使用此方式配置日志框架的可行性(或不可行性)。
我能想到的两个明显的潜在问题是:
1. 构建有效的XML可能很困难(或在数据库中输入)。我的第一个想法是,定义XML的方式与今天相同。将其放入app.config(或外部配置)文件中,然后运行测试程序以验证XML是否产生了预期的结果。 2. 更新数据库中的XML,然后使程序/服务/任何内容对更改做出反应(例如使用log4net的ConfigureAndWatch选项)可能会很容易或很困难(或不可能)。我对程序或服务如何知道XML已更新的机制不太感兴趣。让我们假设程序将定期检查数据库。鉴于新的XML字符串,重新配置日志框架就很容易。
我将把我的技术作为这个问题的答案发布。