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>();
}
}
View Code
2. log4net.config檔案
檔案位置可在program.cs的CreateWebHostBuilder方法中指定,樣例為項目跟目錄。
<?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控制器
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:\\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控制器
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
引用:https://blog.csdn.net/Fanbin168/article/details/89454051