.Net Core3.1 集成Log4net

1.准备

  首先nuget添加下引用  Microsoft.Extensions.Logging.Log4Net.AspNetCore

目前的版本为v3.1.0 ,添加完成后我们开始注册。

 

2.注册

  2.1在Program.cs中注册

       找到 Program.cs里的CreateHostBuilder

        

        

      添加如上代码,,AddFilter() 的意思是过滤掉指定的相关日志。

      注意:此处CreateHostBuilder在版本中不一致。 

      最后添加上配置文件就ok,附上配置文件:

      

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <!-- Define some output appenders -->
  <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logs\log.txt" />
    <!--追加日志内容-->
    <appendToFile value="true" />

    <!--防止多线程时不能Log,官方说线程非安全-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

    <!--可以为:Once|Size|Data|Compsite-->
    <!--Compsite为Size和Data的组合-->
    <rollingStyle value="Composite" />

    <!--当备份文件时,为文件名加的后缀-->
    <datePattern value="yyyyMMdd'.log'" />

    <!--日志的最大个数,都是最新的-->
    <!--rollingStyle为Size时,只能有value个日志-->
    <!--rollingStyle为Compsite时,每天有value个日志-->
    <maxSizeRollBackups value="20" />

    <!--可用的单位:KB|MB|GB-->
    <maximumFileSize value="3MB" />

    <!--值为true时,当前最新日志文件名永远为file节点中的名字-->
    <staticLogFileName value="true" />

    <!--输出级别在INFO和ERROR之间的日志-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ALL" />
      <param name="LevelMax" value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <priority value="ALL" />
    <level value="ALL" />
    <appender-ref ref="rollingAppender" />
  </root>
</log4net>
log4net.Config

 

  2.2在Startup中注册

      此时已经添加了配置文件,再将program中的注册换成在startup中的config注册Log4Net

      

      

3.使用

  以WeatherForecastController为例,首先声明一个ILogger类型对象:

private readonly ILogger<WeatherForecastController> _logger

  

使用构造函数,将log4net注入到ILogger:

public WeatherForecastController(ILogger<WeatherForecastController> logger) 
{ 
    _logger = logger; 
}

  现在WeatherForecastController是这样的

[ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            _logger.LogInformation("======WeatherForecastController Get()======");
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
WeatherForecastController

 

 

4.测试一下

  在Get方法中写入如下日志

  运行后会出现一个名为logs文件夹,写入的日志就在logs下的log.txt中。

  

  

 

posted @ 2020-03-19 22:36  贰拾~  阅读(2556)  评论(0编辑  收藏  举报