.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>
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(); } }
4.测试一下
在Get方法中写入如下日志
运行后会出现一个名为logs文件夹,写入的日志就在logs下的log.txt中。