我正在开发一些可以在两种环境中运行的应用程序:开发或生产。我希望每个都有不同的日志记录基础设施。
环境在运行时传递给我的.exe。如何通过代码启用/禁用相应的appender?在下面的配置中是否还有调整内容?
我在这个app.config文件中有其他内容,用于应用程序设置,根据this为每个键提供“prod”值和“dev”值,所以我不想要多个配置文件。
<log4net>
<root>
<level value="debug" />
<appender-ref ref="Dev" />
<appender-ref ref="Prod" />
</root>
<appender name="Dev" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="blabla 1" />
<layout type="log4net.Layout.PatternLayout">
<Header value="[Application Start] " />
<Footer value="[Application Exit] " />
<ConversionPattern value="%date (%property{ActiveStatus}) %-5level [%2thread] %-20.20logger{1} %message%newline" />
</layout>
</appender>
<appender name="Prod" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="blabla 2" />
<layout type="log4net.Layout.PatternLayout">
<Header value="[Application Start] " />
<Footer value="[Application Exit] " />
<ConversionPattern value="%date (%property{ActiveStatus}) %-5level [%2thread] %-20.20logger{1} %message%newline" />
</layout>
</appender>
</log4net>
答案 0 :(得分:6)
您可能希望根据要发布到的环境,对app.config
文件进行转换。这在Web应用程序中非常常见,但有一个SO解释了如何将其扩展到其他项目类型:
App.Config Transformation for projects which are not Web Projects in Visual Studio 2010?
答案 1 :(得分:3)
我建议每个环境使用一个单独的配置文件,并在运行时加载适当的配置文件。通过这种方式,可以更容易地维护并避免偶尔出现错误,例如将开发特定设置应用于生产追加器等等。
if (environment == "Production")
{
log4net.Config.Configure(Path.Combine(productionFolder, "log4net.config"));
}
答案 2 :(得分:1)
我投票赞成了所有的建议。但是,如果您坚持禁用其中一个appender:
ILoggerRepository repository = log4net.LogManager.GetRepository();
var appender = repository.GetAppenders()
.Where(a => a.Name == "dev")
.Single();
appender.Close();
答案 3 :(得分:-1)
也许使用标签<threshold value="OFF"/>
并另行修改??
以这种方式评论
<!-- <threshold value="OFF"/> -->
当您需要启用日志记录时