我的应用程序应支持多种日志记录方案,这些方案可能由环境设置或用户定义的标志提供:
调试 - 由启动参数触发,连接调试器或构建配置设置为 debug < / em>的。活动的appenders: DebugAppender (登录到附加的调试器,如果有的话)。
详细 - 由启动参数触发。 Active appenders:默认,但是appender应该有更具表现力的输出(字符串模式)以获取更多信息
发布 - 由RELEASE构建配置触发。 Active appenders: RollingFlatFileAppender , EventLogAppender (因为它是Windows服务)
控制台 - 由启动参数触发。有效的追加器: ColoredConsoleAppender
应该可以混合某些模式,例如Release / Console,Release / Console / Verbose,Debug / Console,Debug / Verbose。
log4net是否支持这样的动态配置?它尝试使用预构建操作提供不同的log4net-config文件,但这仅适用于RELEASE和DEBUG构建配置,不包括启动参数。或者是否有任何其他日志框架可能支持此类方案简单方法? (例如,不在运行时改变app.config,这只是一个PITA)
答案 0 :(得分:1)
您可以轻松地在代码中配置log4net。这里还有另一个stackoverflow问题,它显示了如何完成:Enable file logging for log4net from code instead of from configuration
我不确定如何附加调试器可以触发Debug配置的激活,但您可以设置Visual Studio在启动时通过Debug - &gt;添加命令行参数。项目设置(Visual Studio)中的命令行选项。
可以通过“#if DEBUG”预处理语句等来切换配置设置,但我只是坚持使用命令行参数来简化构建。
顺便说一下,即使你有一些像Windows服务一样运行而没有问题,你也可以使用控制台appender。
答案 1 :(得分:0)
我将通过提及previous question of yours来重复自己(有点)。就像我之前建议你的那样,我真的建议声明所有的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.Debugger.IsAttached值以便在log4net上下文中设置属性。
最后,版本构建可以由#IF DEBUG
指令简单地处理。除了轮询之外,每个属性都可以在启动时激活,因此您的日志配置应该具有非常紧密的表面区域。