【发布时间】:2014-09-23 13:09:32
【问题描述】:
我的应用程序既可以作为Windows 服务 也可以在控制台环境 中启动。对于每种情况,我都需要一些 log4net 附加程序处于活动状态(或分别不处于活动状态)以及一些在两种情况下都处于活动状态的附加程序。 (服务:RollingFileAppender,DebugAppender(如果启用),EventLogAppender | 控制台:ColoredConsoleAppender,DebugAppender( 如果启用))
实现类似功能的唯一方法是将PropertyFilter 与ThreadContext.Properties 一起使用,如下所示:
<filter type="log4net.Filter.PropertyFilter">
<key value="ApplicationMode" />
<stringToMatch value="Service" />
</filter>
if(!Environment.UserInteractive)
ThreadContext.Properties["ApplicationMode"] = "Service";
但是,由于该属性是在线程上下文中声明的,因此它仅适用于当前线程。如果线程更改,则配置正在重置,我必须再次声明它。
log4net 是否支持在配置中声明 PropertyFilter 以自动设置所需环境的方法?像这样:
<filter type="log4net.Filter.PropertyFilter">
<key value="{Environment.UserInteractive}" />
<stringToMatch value="false" />
</filter>
或者...有更好的方法吗?由于我还没有找到解决方案..这是一种不常见的做法吗?
【问题讨论】:
-
你的控制台应用和windows服务是在两个不同的项目下吗?为什么不在每个项目中创建配置文件来满足您的需求?
标签: c# logging windows-services log4net app-config