.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:
1 2 3 4 | 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中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!