2012-04-26 66 views
0

我正在开发一些应用程序,可以在两种环境下运行:开发或生产。我希望每个都有不同的日志记录基础结构。生产和开发log4net配置?

环境在运行时传递给我的.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]&#13;&#10;" /> 
     <Footer value="[Application Exit]&#13;&#10;" /> 
     <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]&#13;&#10;" /> 
     <Footer value="[Application Exit]&#13;&#10;" /> 
     <ConversionPattern value="%date (%property{ActiveStatus}) %-5level [%2thread] %-20.20logger{1} %message%newline" /> 
     </layout> 
    </appender> 

</log4net> 
+0

顺便说一句,你可以移动只是东西到一个单独的文件。请参阅http://stackoverflow.com/a/445988/562906 – sinelaw 2012-04-26 13:47:34

+0

您可以在运行时访问log4net配置并修改appender集合 – lnu 2012-04-26 13:52:56

+0

如何执行此操作? – Jerome 2012-04-26 14:14:51

回答

6

你可能要考虑做根据你发布到该环境中的app.config文件转换。这是在Web应用程序很常见,但也有是说明了如何将其扩展到其他项目类型的SO:

App.Config Transformation for projects which are not Web Projects in Visual Studio 2010?

+0

+1你应该肯定会花时间让app.config转换工作 - 它们不仅适用于log4net配置,还适用于app.config中的所有内容,这些内容不同于开发阶段到生产阶段。 – wal 2012-04-26 13:55:26

-1

也许使用标签<threshold value="OFF"/>并修改交替?

注释掉这样

<!-- <threshold value="OFF"/> --> 

当你需要启用日志记录

+0

关心downvote – 2012-04-26 13:53:05

+2

即使我不是downvoter ...这个答案显然是愚蠢的*,因为它不适用于(几乎)自动/自动部署......绝对没有企业解决方案!如果你在自己的机器上并建立关闭的设置,这可能是好的......但对于其他情况,这是**不是**适当的解决方案! – 2012-04-26 14:01:12

2

我建议每个环境单独的配置文件并加载运行时间恰当的。以这种方式,维护和避免偶尔出现的错误就像开发特定的设置被应用到生产appender等等一样。

if (environment == "Production") 
{ 
    log4net.Config.Configure(Path.Combine(productionFolder, "log4net.config")); 
} 
+0

这仍然会导致相同的问题,因为'环境'变量/应用程序设置可能偶尔会覆盖开发中的设备等等。 – Dienekes 2017-09-06 19:47:36

1

我投SLL的建议。但是,如果你坚持要禁用附加目的地之一:

ILoggerRepository repository = log4net.LogManager.GetRepository(); 
var appender = repository.GetAppenders() 
    .Where(a => a.Name == "dev") 
    .Single(); 
appender.Close();