NETCORE - 日志插件 Log4Net
安装nuget包:
Microsoft.Extensions.Logging.Log4Net.AspNetCore
方式一
1. Program.cs文件
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方法中指定,样例为项目跟目录。
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender"> <!--指定日志文件保存的目录,目录可不在项目中--> <!--<file value="d:\AAloglog.txt"/>--> <file value="loglog.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控制器
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
在项目跟目录下创建
<?xml version="1.0" encoding="utf-8"?> <configuration> <log4net> <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender"> <!--指定日志文件保存的目录,目录可不在项目中--> <!--<file value="d:\AAloglog.txt"/>--> <file value="loglog.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控制器
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!"}); } } }
运行后,可查看生成的日志文件
项目:NETCORE.Log4Net1
项目:NETCORE.Log4Net2
附代码:https://gitee.com/wuxincaicai/NETCORE.git