动态log4net配置
本文关键字:配置 log4net 动态 | 更新日期: 2023-09-27 18:13:09
我的应用程序应该支持一些日志记录场景,这些场景可能是由环境设置或用户定义的标志给出的:
Debug -当附加调试器或构建配置设置为 Debug时,由启动参数触发。DebugAppender(记录到附加的调试器,如果可用)。
Verbose—由启动参数触发。活动追加器:默认值,但是追加器应该有一个更具表现力的输出(字符串模式),用于附加信息
Release -由Release构建配置触发。活动appender: RollingFlatFileAppender, EventLogAppender(因为它是Windows服务)
Console—由启动参数触发。ColoredConsoleAppender
应该可以混合某些模式,例如发布/控制台,发布/控制台/详细,调试/控制台,调试/详细。
log4net是否支持这种动态配置?它尝试使用预构建操作来提供不同的log4net-config文件,但是这只适用于RELEASE和DEBUG构建配置,不包括启动参数。或者有没有其他的日志框架可以支持这样的场景简单的方法?(例如,在运行时不更改app.config,这只是一个PITA)
可以很容易地在代码中配置log4net。这里有另一个stackoverflow问题,它说明了如何做到这一点:从代码而不是从配置
启用log4net的文件日志记录我不确定如何附加调试器可以触发调试配置的激活,但您可以设置Visual Studio在启动时通过项目设置(Visual Studio)中的Debug ->命令行选项添加命令行参数。
配置设置可以通过"#if DEBUG"预处理语句等来切换,但我只坚持使用命令行参数来简化您的构建。
顺便说一下,你可以使用控制台附加程序,即使你有一些东西作为Windows服务运行没有问题。
我要重复一下你之前的问题。正如我之前建议的那样,我真的建议声明所有的appender,然后根据在全局log4net上下文中声明的属性对它们进行过滤。当然,因为你想要混合和匹配你的appender,你不会有一个属性来做路由,而是x个属性,每个属性对应一个appender:
<appender name="ColoredConsoleAppender"
type="log4net.Appender.ColoredConsoleAppender,log4net">
<filter type="log4net.Filter.PropertyFilter">
<key value="ConsoleAppenderActive" />
<stringToMatch value="true" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
然后在启动代码中设置所有属性:
log4net.GlobalContext.Properties["ConsoleAppenderActive"] =
ParametersContainConsoleAppenderActive ? "true" : "false";
只有调试器的触发器;为此,我没有发现在附加调试器时触发任何事件,因此您可以轮询system . diagnostics . debug . isattached值,以便在log4net上下文中设置属性。
最后,发布构建可以简单地由#IF DEBUG
指令来处理。除了轮询之外,每个属性都可以在启动时激活,因此您应该为日志配置提供非常紧凑的表面积。