在ASP.Net Core Web API中使用Log4Net
1、引用Log4Net
在Nuget中引入Log4Net和Microsoft.Extensions.Logging.Log4Net.AspNetCore。
2、配置Log4Net
(1) 整理配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?xml version= "1.0" encoding= "utf-8" ?> <log4net> <appender name= "RollingLogFileAppender" type= "log4net.Appender.RollingFileAppender" > <file value= "log\log.txt" /> <!-- 追加日志内容 --> <appendToFile value= "true" /> <!-- 修小锁定模型:允许多个进程写入同一个文件 --> <lockingModel type= "log4net.Appender.FileAppender+MinimalLock" /> <!-- 备份文件格式 --> <datePattern value= "yyyyMMdd.txt" /> <!-- 仅根据文件大小滚动文件 --> <rollingStyle value= "Size" /> <!-- 备份文件的个数(-1不做限制) --> <maxSizeRollBackups value= "-1" /> <!-- 单个日志文件最大的大小 --> <maximumFileSize value= "50MB" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <root> <level value= "ALL" /> <appender- ref ref = "RollingLogFileAppender" /> </root> </log4net> |
(2) 在Program类中配置Log4Net
1 2 3 4 5 6 7 8 9 10 11 | public static IHostBuilder CreateHostBuilder( string [] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggingBuilder => { //支持IOC控制反转 loggingBuilder.AddLog4Net( "Config/log4net.config" ); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); |
3、使用Log4Net
通过依赖注入使用Logger。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [ApiController] [Route( "api/[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( "Get WeatherForecast" ); 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、过滤系统日志
1 2 3 4 5 6 7 | //过滤日志 loggingBuilder.AddFilter( "System" , LogLevel.Information); loggingBuilder.AddFilter( "System" , LogLevel.Warning); loggingBuilder.AddFilter( "Microsoft" , LogLevel.Information); loggingBuilder.AddFilter( "Microsoft" , LogLevel.Warning); loggingBuilder.AddFilter( "Microsoft.Hosting.Lifetime" , LogLevel.Information); loggingBuilder.AddFilter( "Microsoft.Hosting.Lifetime" , LogLevel.Warning); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器