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