如何在ASP.NET 5.0中为log4net(或其他任何第三方库)添加配置

问题描述 投票:12回答:3

[我在ASP.NET 5.0 features上阅读了Scott Gu的博客,博客中提到的新功能之一是使用json文件作为配置并消除了Web.config文件。

我对该功能没有什么疑问。

假定我具有以下log4net配置,该配置先前已在ASP.NET的早期版本中添加到Web.Config中

配置文件

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>

如何在config.json中添加节?

如何将上面的xml转换并添加到config.json中?

第3方库(在我的示例中为log4net)或库的用户是否必须添加某种类型的自定义转换api以支持基于json的配置,以便利用ASP.NET 5.0中提供的新配置功能?

json configuration log4net asp.net-core asp.net-core-mvc
3个回答
10
投票

最近,我对log4net遇到了同样的问题。我设法做到了如下:

创建包含log4net的配置部分的log4net.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
...
</log4net>

您可以将文件放在项目根文件夹中。

并且在Startup.Startup()方法中,您可以配置提供XML作为配置的log4net

public Startup(IApplicationEnvironment appEnv)
{
    // ... 

    XmlConfigurator.Configure(new FileInfo(Path.Combine(appEnv.ApplicationBasePath, "log4net.xml")));
}

我希望这会有所帮助。


0
投票

当前的log4net版本不支持Json项目,因此配置必须位于单独的xml文件中。


0
投票

如果使用Microsoft.Extensions.Logging.Log4Net.AspNetCore nuget包,有一种方法可以将log4net配置保留在appsettings.json中(但实际上不是很有用)。

您可以写入覆盖从log4net配置文件中的节点的规则到appsettings.json(或针对不同环境的appsettings.Environment.json)中。

Documentation

从appsettings.json设置日志记录级别的示例。

appsettings.json:

{
  "Log4NetCore": {
    "PropertyOverrides": [
      {
        "XPath": "/log4net/root/level",
        "Attributes": {
          //"value": "ALL"
          //"value": "DEBUG"
          //"value": "INFO"
          "value": "WARN"
          //"value": "ERROR"
          //"value": "FATAL"
          //"value": "OFF"
        }
      }
    ]
  }
}

您仍然需要log4net配置文件,以及要从appsettings.json中覆盖的节点:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="example.log" />
     <appendToFile value="true" />
    <maximumFileSize value="100KB" />
    <maxSizeRollBackups value="2" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="RollingFile" />
  </root>
</log4net>

Startup.cs中的注册:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // Add these lines
        var loggingOptions = this.Configuration.GetSection("Log4NetCore")
                                               .Get<Log4NetProviderOptions>();
        loggerFactory.AddLog4Net(loggingOptions);

        app.UseMvc();
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.