天天看點

NETCORE - 日志插件 Log4Net

NETCORE - 日志插件 Log4Net

安裝nuget包:

Microsoft.Extensions.Logging.Log4Net.AspNetCore

NETCORE - 日志插件 Log4Net

方式一

1.  Program.cs檔案

NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
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方法中指定,樣例為項目跟目錄。

NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
<?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控制器

NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
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. 檢視日志

NETCORE - 日志插件 Log4Net

方式二

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

在項目跟目錄下建立

NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
<?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控制器

NETCORE - 日志插件 Log4Net
NETCORE - 日志插件 Log4Net
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 - 日志插件 Log4Net

項目:NETCORE.Log4Net1

項目:NETCORE.Log4Net2

附代碼:https://gitee.com/wuxincaicai/NETCORE.git

引用:https://blog.csdn.net/Fanbin168/article/details/89454051