gpt4 book ai didi

c# - 基于 log4net 构建配置的不同附加程序

转载 作者:行者123 更新时间:2023-11-30 22:05:26 25 4
gpt4 key购买 nike

我的主要应用程序要么在控制台环境中启动,要么作为一个Windows 服务,基于某些指标(启动标志、#if 指令,...)。只要应用程序以“生产模式”运行,例如在没有用户上下文作为启动服务的情况下,我想同时记录到文件(信息、警告)和Windows 事件日志。但是,当我调试时,我希望日志消息只执行到控制台窗口。

有没有什么方法可以使用 log4net 来实现这一点,而不包括在运行时接触应用程序配置?

最佳答案

坦率地说,代码方法对我来说听起来不是一个好主意,因为它向最终管理系统的人隐藏了一些行为。由于您可能有两个构建配置(发布和调试?)为什么不使用它们来代替 change the configuration file depending on the build你在做什么。

如果你真的不想这样做,那么这里是如何做的:你可以在你的 log4net 库的全局上下文中设置一个自定义属性

// declare this code as soon as you've determined what context you're in
log4net.GlobalContext.Properties["ApplicationMode"] = "Service";
// or 'Console", with an #IF directive

然后在您的 log4net 配置中,您可以使用 log4net 的 PropertyFilter 过滤掉将被 appender 捕获的消息

你的开发者的控制台附加器:

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">

<filter type="log4net.Filter.PropertyFilter">
<key value="ApplicationMode" />
<stringToMatch value="Console" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %-25.25logger{1} - %message%newline" />
</layout>
</appender>

和你的产品的文件附加器

<appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">

<filter type="log4net.Filter.PropertyFilter">
<key value="ApplicationMode" />
<stringToMatch value="Service" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

<file value="mylogfile.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %-25.25logger{1} - %message%newline" />
</layout>
</appender>

然后为您的日志声明所有附加程序:

<root>
<level value="DEBUG"/>
<appender-ref ref="FileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root>

这将根据全局属性中的值将您的消息发送到正确的附加程序。 DenyAllFilter 很重要; log4net 的工作原理是让所有消息默认通过,您只需要与您的 PropertyFilter

匹配的消息

关于c# - 基于 log4net 构建配置的不同附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com