NetCore 使用Log4Net(兩種方式)


首先去Nuget中安裝Log4Net包

安裝:log4net

安裝:Microsoft.Extensions.Logging.Console

安裝:Microsoft.Extensions.Logging.Log4Net.AspNetCore

方式一

Program.cs文件

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
 
namespace NetCoreApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();//CreateWebHostBuilder啟動了Kestrel服務器,這個服務器負責監聽--轉發--響應客戶端請求(這樣就不需要IIS來負責監聽,轉發,響應客戶端請求了,IIS就只做反向代理就行了)
        }
 
        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>();
    }
}

控制器中使用

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
 
namespace NetCoreApp.Controllers
{
    public class HomeController : Controller
    {
        //ILoggerFactory和ILogger都是系統內置的接口,它們兩個都可以寫日志,隨便你用哪個都行
        public ILoggerFactory _Factory = null;  
        public ILogger<HomeController> _logger = null;
 
        //注意:ILoggerFactory的命名空間是Microsoft.Extensions.Logging;
        public HomeController(ILoggerFactory factory, ILogger<HomeController> logger)
        {
            this._Factory = factory;
            this._logger = logger;
        }
        public IActionResult Index()
        {
            var msg = _user.Sum();
            this._Factory.CreateLogger<HomeController>().LogError("這里出現了一個錯誤");
            this._logger.LogError("出現了嚴重的錯誤!");
           
            return Content("OK");
        }       
    }
}

log4net.config 配置文件    注意:這個配置文件的最外層用 <log4net>包裹的 ;配置文件直接放在了項目根目錄下

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
    <!--指定日志文件保存的目錄-->
    <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>

方式二

Startup文件

public class Startup
{
    //為StartUp.cs添加屬性
    public static ILoggerRepository repository { get; set; }
    public IConfiguration Configuration { get; } //構造函數注入:Configuration用於讀取配置文件的
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
 
        repository = LogManager.CreateRepository("NetCoreApp"); //我的項目名稱叫NetCoreApp
        //指定配置文件
        XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
    }
}

控制器中使用

using log4net;
using Microsoft.AspNetCore.Mvc;
 
namespace NetCoreApp.Controllers
{
    public class HomeController : Controller
    {
        private ILog log;
 
        public HomeController()
        {
            this.log = LogManager.GetLogger(Startup.repository.Name, typeof(HomeController));
        }
        public IActionResult Index()
        {
            log.Error("哈哈,出現錯誤啦");
            
            return Content("OK");
        }       
    }
}

log4net.config配置文件:注意,這個配置文件的最外層用<configuration>包裹的;配置文件直接放在了項目根目錄下

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>
    <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
      <!--指定日志文件保存的目錄-->
      <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>
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM