NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
安装nuget包:
Microsoft.Extensions.Logging.Log4Net.AspNetCore
方式一
1. Program.cs文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace NETCORE.Log4Net1 { public class Program { public static void Main(string[] args) { //CreateWebHostBuilder启动了Kestrel服务器, //这个服务器负责监听--转发--响应客户端请求 //(这样就不需要IIS来负责监听,转发,响应客户端请求了,IIS就只做反向代理就行了) CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureLogging((context, loggingbuilder) => { //该方法需要引入Microsoft.Extensions.Logging名称空间 loggingbuilder.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志 loggingbuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志 //添加Log4Net //var path = Directory.GetCurrentDirectory() + "\\log4net.config"; //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径 loggingbuilder.AddLog4Net(); }) .UseStartup<Startup>(); } }
2. log4net.config文件
文件位置可在program.cs的CreateWebHostBuilder方法中指定,样例为项目跟目录。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender"> <!--指定日志文件保存的目录,目录可不在项目中--> <!--<file value="d:\\AAlog\log.txt"/>--> <file value="log\log.txt"/> <!--追加日志内容--> <appendToFile value="true"/> <!--可以为:Once|Size|Date|Composite--> <!--Compoosite为Size和Date的组合--> <rollingStyle value="Composite"/> <!--设置为true,当前最新日志文件名永远为file字节中的名字--> <staticLogFileName value="false"/> <!--当备份文件时,备份文件的名称及后缀名--> <datePattern value="yyyyMMdd.TXT"/> <!--日志最大个数--> <!--rollingStyle节点为Size时,只能有value个日志--> <!--rollingStyle节点为Composie时,每天有value个日志--> <maxSizeRollBackups value="20"/> <!--可用的单位:KB|MB|GB--> <maximumFileSize value="5MB"/> <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 [%property{NDC}] - %message%newline"/> </layout> </appender> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="RollingAppender"/> </root> </log4net>
3. webapi调用
创建TestController控制器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using log4net.Core; //using log4net.Repository.Hierarchy; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace NETCORE.Log4Net1.Controllers { [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { public ILoggerFactory _loggerFactory = null; public ILogger<TestController> _logger = null; public TestController(ILoggerFactory loggerFactory, ILogger<TestController> logger) { this._loggerFactory = loggerFactory; this._logger = logger; } [Route("get1")] [HttpGet] public IActionResult Get1() { this._loggerFactory.CreateLogger<TestController>().LogError("loggerFactory - 这里出了一个错误!"); this._logger.LogError("logger - 这里出出现了一个错误!"); return Ok("日志测试!"); } } }
4. 查看日志
方式二
Startup文件
public Startup(IConfiguration configuration) { Configuration = configuration; loggerRepository = LoggerManager.CreateRepository("NetCoreApp"); //我的项目名称叫NetCoreApp //指定配置文件 XmlConfigurator.Configure(loggerRepository, new FileInfo("log4net.config")); } //为StartUp.cs添加属性 public static ILoggerRepository loggerRepository { get; set; }
log4net.config
在项目跟目录下创建
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <configuration> <log4net> <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender"> <!--指定日志文件保存的目录,目录可不在项目中--> <!--<file value="d:\\AAlog\log.txt"/>--> <file value="log\log.txt"/> <!--追加日志内容--> <appendToFile value="true"/> <!--可以为:Once|Size|Date|Composite--> <!--Compoosite为Size和Date的组合--> <rollingStyle value="Composite"/> <!--设置为true,当前最新日志文件名永远为file字节中的名字--> <staticLogFileName value="false"/> <!--当备份文件时,备份文件的名称及后缀名--> <datePattern value="yyyyMMdd.TXT"/> <!--日志最大个数--> <!--rollingStyle节点为Size时,只能有value个日志--> <!--rollingStyle节点为Composie时,每天有value个日志--> <maxSizeRollBackups value="20"/> <!--可用的单位:KB|MB|GB--> <maximumFileSize value="5MB"/> <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 [%property{NDC}] - %message%newline"/> </layout> </appender> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="RollingAppender"/> </root> </log4net> </configuration>
创建 testController webapi控制器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using log4net; using log4net.Repository.Hierarchy; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace NETCORE.Log4Net2.Controllers { [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { private ILog log; public TestController() { this.log = LogManager.GetLogger(Startup.loggerRepository.Name,typeof(TestController)); } [Route("Get1")] [HttpGet] public IActionResult Get1() { this.log.Error("这里出现了一个错误"); return new JsonResult(new { aaa="哈哈,test!"}); } } }
运行后,可查看生成的日志文件
.net6 中使用 log4net 日志
1. 项目根目录下 创建 log4net.config 文件
<?xml version="1.0" encoding="utf-8" ?> <log4net> <!--根配置--> <root> <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG --> <level value="ERROR"/> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <appender-ref ref="ErrorLog" /> <appender-ref ref="WarnLog" /> <appender-ref ref="InfoLog" /> <appender-ref ref="DebugLog" /> </root> <!-- 错误 Error.log--> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="../../../log4"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'error.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss}]%m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 警告 Warn.log--> <appender name="WarnLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="../../../log4"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'warn.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss}]%m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <!-- 信息 Info.log--> <appender name="InfoLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="../../../log4"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'info.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss}]%m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 调试 Debug.log--> <appender name="DebugLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="../../../log4"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'debug.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss}]%m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> </log4net>
2. 注入 program.cs 中(注意:文件需要配置属性-> 复制到输出目录)
//日志 注入Log4Net builder.Services.AddLogging(cfg => { cfg.AddLog4Net(); //默认的配置文件路径是在根目录,且文件名为log4net.config //如果文件路径或名称有变化,需要重新设置其路径或名称 //比如在项目根目录下创建一个名为cfg的文件夹,将log4net.config文件移入其中,并改名为log.config //则需要使用下面的代码来进行配置 //cfg.AddLog4Net(new Log4NetProviderOptions() //{ // Log4NetConfigFileName = "cfg/log.config", // Watch = true //}); });
//1.过滤掉系统默认的一些日志
//2.这里配置后,appsettings.json中的Logging配置将失效
builder.Logging.AddFilter("System", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("Microsoft", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("Microsoft.Hosting.Lifetime", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("MyShopApi", LogLevel.Debug); //自定义项目过滤级别,使用项目命名空间
3. 接口中使用:
public class ResourceOwnerPasswordValidator { public ILogger<ResourceOwnerPasswordValidator> logger; public ResourceOwnerPasswordValidator(ILogger<ResourceOwnerPasswordValidator> _logger) { this.logger = _logger; }
public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) {
logger.LogError("logger - 这里出出现了一个错误!");
logger.LogInformation("logger - 这里出现一个信息!");
logger.LogDebug("logger - 这里出现一个信息!");
logger.LogWarning ("logger - 这里出出现了一个warning!");
}
}
项目:NETCORE.Log4Net1
项目:NETCORE.Log4Net2
附代码:https://gitee.com/wuxincaicai/NETCORE.git
引用:https://blog.csdn.net/Fanbin168/article/details/89454051