注意:所有的Nuget包默认都装在NET6Demo_WebApi项目下,其它类库项目按需添加
第一步,安装nuget包。
第二步,添加log4net的配置文件
在api层,添加文件夹Config,然后添加log4net.config文件
log4net 在.net6 中对写入数据库并不友好,不建议写入数据库
- "1.0"?>
-
- <configuration>
- <configSections>
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
- configSections>
-
- <log4net>
-
-
- <root>
- <priority value="ALL"/>
- <level value="ALL"/>
-
- <appender-ref ref="ErrorLog" />
- <appender-ref ref="WarnLog" />
- <appender-ref ref="InfoLog" />
- <appender-ref ref="DebugLog" />
- root>
-
-
-
- <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
-
- <file value="Log\\LogError\\"/>
-
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-
- <datePattern value="yyyyMMdd".log""/>
-
- <appendToFile value="true"/>
-
- <rollingStyle value="Composite"/>
-
- <staticLogFileName value="false"/>
-
- <maximumFileSize value="200MB"/>
-
- <maxSizeRollBackups value="-1"/>
-
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
- layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <LevelMin value="ERROR" />
- <LevelMax value="ERROR" />
- filter>
- appender>
-
-
- <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
-
- <file value="Log\\LogWarn\\"/>
-
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-
- <datePattern value="yyyyMMdd".log""/>
-
- <appendToFile value="true"/>
-
- <rollingStyle value="Composite"/>
-
- <staticLogFileName value="false"/>
-
- <maximumFileSize value="200MB"/>
-
- <maxSizeRollBackups value="-1"/>
-
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
- layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <LevelMin value="WARN" />
- <LevelMax value="WARN" />
- filter>
- appender>
-
-
- <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
-
- <file value="Log\\LogInfo\\"/>
-
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-
- <datePattern value="yyyyMMdd".log""/>
-
- <appendToFile value="true"/>
-
- <rollingStyle value="Composite"/>
-
- <staticLogFileName value="false"/>
-
- <maximumFileSize value="200MB"/>
-
- <maxSizeRollBackups value="-1"/>
-
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
- layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <LevelMin value="INFO" />
- <LevelMax value="INFO" />
- filter>
- appender>
-
-
- <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
-
- <file value="Log\\LogDebug\\"/>
-
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-
- <datePattern value="yyyyMMdd".log""/>
-
- <appendToFile value="true"/>
-
- <rollingStyle value="Composite"/>
-
- <staticLogFileName value="false"/>
-
- <maximumFileSize value="200MB"/>
-
- <maxSizeRollBackups value="-1"/>
-
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
- layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <LevelMin value="DEBUG" />
- <LevelMax value="DEBUG" />
- filter>
- appender>
-
- log4net>
-
- configuration>
在项目Utility中添加类Loh4Extention.cs
代码内容如下。主要是过滤掉日志中太多的重复信息。注意代码粘贴后会报错,多是因为没有安装包。解决方法就是哪里报错就在哪里安装包
- using Microsoft.Extensions.Logging;
-
- namespace NET6Demo.Utility.Log
- {
- public static class Log4Extention
- {
- public static void InitLog4(ILoggingBuilder loggingBuilder)
- {
- loggingBuilder.AddFilter("System", LogLevel.Warning);
- loggingBuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
- loggingBuilder.AddLog4Net(new Log4NetProviderOptions()
- {
- Log4NetConfigFileName = "Config/log4net.config",
- Watch = true
- });
- }
- }
- }
program.cs文件中添加以下代码,添加log4net全局引用.注意代码粘贴后会报错,多是因为没有安装包,或者没有引用。解决方法就是哪里报错就在哪里安装包
- #region 添加Log4net
-
- builder.Host.ConfigureLogging((context, loggingBuilder) =>
- {
- Log4Extention.InitLog4(loggingBuilder);
- });
-
-
-
- #endregion
使用时依赖注入,现在开始建立控制器
先建立一个基类控制器,再建一个测试控制器继承基类控制器
BaseController.cs
- using Microsoft.AspNetCore.Mvc;
-
- namespace NET6Demo_WebApi.Controllers
- {
- [ApiController]
- public abstract class BaseController : ControllerBase
- {
-
- }
- }
TestController.cs
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
-
- namespace NET6Demo_WebApi.Controllers
- {
- public class TestController : BaseController
- {
- private ILogger
_logger; - public TestController(ILogger
logger ) - {
- _logger = logger;
- }
-
- [AllowAnonymous]
- [HttpGet("GetTest")]
- public async Task
GetTestResult() - {
- Console.WriteLine("测试一下输出日志");
- _logger.LogInformation("日志输出了");
- return Ok();
- }
- }
- }
启动项目,来测试一下,打开swagger首页,点击Test的try it out ,然后点击 Execute ,让程序执行
控制台可以看到输出内容
打开项目的bin文件夹,可以看到已经生成的log目录
找到其中的loginfo,因为刚刚的日志是用log.infomation写入的。
由日期生成的文件名,打开可以看到日志内容已被写入
到此。log4net配置完毕。注意所有使用log4net的类,都需要依赖注入ILogger