.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中。

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM