具有Multip环境的.net Core 2.1 Log4net

Joe*_*oel 5 c# log4net .net-core .net-core-2.1

我正在开发.net core 2.1应用程序,并尝试将log4net合并到文件中写入日志。我可以使它工作,但无法弄清楚如何写入日志将位于不同位置的不同环境(即测试/生产)。

log4net.config

<log4net>
    <root>
        <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>
  <appender name="console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level - %message%newline" />
    </layout>
    <threshold value="Info" />
  </appender>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file value="C:\logs\TestLocation\MyLog.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="100MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %level - %message%newline" />
    </layout>
    <threshold value="Info" />
  </appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)

我的startup.cs配置方法是:

loggerFactory.AddLog4Net();
Run Code Online (Sandbox Code Playgroud)

我将记录器注入到控制器中:

 public MyController(ILogger<MyController> logger)
 {
     _logger = logger;
 }
Run Code Online (Sandbox Code Playgroud)

并在我的控制器中使用它:

_logger.LogInformation("My logger worked!!!!!!!!!!!");
Run Code Online (Sandbox Code Playgroud)

这一切都很好。我希望我可以添加一个新的log4net.config文件并将其命名为log4net.Production.config,然后应用程序将根据其所处的环境(例如appnsettings.json)使用不同的配置文件。相反,它仅使用我的默认log4net.config文件。

每个环境(例如appsettings.json)是否可以有多个log4net.config文件?

Huo*_*rds 5

您可以选择使用appsettings.{environment}.json 中的高级自定义配置

覆盖该Log4NetConfigFileName属性的值,您将能够为每个环境指示不同的 log4net.config 文件。

"Log4NetCore": {
    "Log4NetConfigFileName": "log4net.production.config"
}
Run Code Online (Sandbox Code Playgroud)

为了获得此自定义配置,您应该将AddLog4Net()调用替换为对AddLog4Net(Log4NetProviderOptions)方法的等效调用。

"Log4NetCore": {
    "Log4NetConfigFileName": "log4net.production.config"
}
Run Code Online (Sandbox Code Playgroud)

由于您的项目中已经配置了按环境加载的动态 appsettings.json,因此应该自动为您的生产环境进行特定配置。

希望这可以帮助。


Tia*_*nck 4

在你的 上Startup.cs,你可以这样配置:

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
    FileInfo fInfo;

    if (File.Exists(Path.Combine(env.ContentRootPath, $"log4net.{env.EnvironmentName}.xml")))
        fInfo = env.GetLog4NetFile($"log4net.{env.EnvironmentName}.xml");
    else
        fInfo = env.GetLog4NetFile($"log4net.xml");

    XmlConfigurator.Configure(fInfo);
    LogManager.GetLogger(DefaultLoggerName)?.Info($"Environment={env.EnvironmentName}"); 
    Configuration = configuration;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个类似的文件log4net.Production.xml,并根据使用的环境对其进行自定义。