生产和开发日志4net配置

本文关键字:4net 配置 日志 开发 | 更新日期: 2023-09-27 18:32:16

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

环境在运行时传递给我的.exe。如何通过代码启用/禁用相应的附加器?下面的配置中也有什么需要调整的吗?

我在这个 app.config 文件中还有其他用于应用程序设置的内容,基于此为每个键提供一个"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>

生产和开发日志4net配置

您可能需要考虑根据要发布到的环境对app.config文件进行转换。 这在 Web 应用程序中很常见,但是有一个 SO 解释了如何将其扩展到其他项目类型:

Visual Studio 2010 中不是 Web 项目的 App.Config 转换?

我建议每个环境使用单独的配置文件,并在运行时加载适当的配置文件。通过这种方式,可以更轻松地维护和避免偶尔出现的错误,例如将开发特定设置应用于生产追加器等。

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

我投票支持sll的建议。但是,如果您坚持禁用其中一个追加程序:

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

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

以这种方式注释掉

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

当您需要启用日志记录时