Asp.NetCore中集成各種日志框架


前言

  Asp.NetCore自帶日志記錄功能,但提供的功能相對於第三方日志框架的來說不夠“強悍”,但自身以面向接口的方式實現,很方便集成各種日志框架,這里先集成兩個比較常用的日志框架,Log4Net和Serilog;

正文

  Asp.NetCore自帶日志的使用;

  1. 先創建一個WebApi項目;

  

 

 

   將launchSettings配置文件修改一下(其實就是把IIS相關配置刪掉就行),即以項目的方式啟動,不用IIS的方式,這樣方便查看日志;

  

 

 

   2. 項目中已經集成了日志功能,打開WeatherForecastController.cs文件,構造函數就已經注入好了日志實例(.NetCore已經集成了IOC),直接用即可;

  

 

 

   3. 在WeatherForecastController的Get方法中用一把實例一把logger;

  提供了現有方法,如下

  

 

 

   使用

  

 

 

   4. 運行結果

  

 

 

   用起來是不是很簡單,但是明明寫了五個日志,為什么就只有三個顯示了? 那是因為級別做限制了,直接修改appsettings文件即可,如果是開發環境,修改appsettings.Development.json;

   

 

 

   運行結果,寫的5個日志都顯示出來了:

  

 

 

   5.當我們不想看到那么多級別的日志,只關心Warn級別日志的時候,我們向上面一樣可以改配置文件,也可以在代碼中修改,這里在Program.cs代碼中過濾一下:

  

 

 

   注:ConfigureLogging中可以進行日志相關的很多配置,大家可以下去自己嘗試;

  運行效果:

  

 

 

   從上面來看,系統自帶日志其實對於開發過程中調試是比較方便的,直接在控制台顯示了,而且還可以指定對應級別,甚至可以自定義。但是提供的功能有限,如顯示格式及存儲方式目前沒有提供,而成熟的第三方日志框架已經實現了(如Log4Net,Serilog),所以開始集成一把試試。

  2. 集成Log4Net;(之前我們都會以工具類的形式集成Log4Net,在這就不說那種方式了,在.NetCore中,直接接管自帶的日志)

  三大步之A:引入Log4Net日志擴展包:Microsoft.Extensions.Logging.Log4Net.AspNetCore

  三大步之B:編寫配置文件log4net.xml,並設置屬性為始終復制;

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="Info" type="log4net.Appender.RollingFileAppender">
    <file value="Log\\" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="false" />
    <encoding  value="utf-8" />
    <DatePattern value="yyyy-MM-dd".txt""/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date  %-5level  - %message%newline" />
    </layout>
  </appender>

  <appender name="Error" type="log4net.Appender.RollingFileAppender">
    <file value="Log\\" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="false" />
    <encoding  value="utf-8" />
    <DatePattern value="yyyy-MM-dd".txt""/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date  %-5level  - %message%newline" />
    </layout>
  </appender>
  
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level - %message%newline" />
    </layout>
  </appender>

  <logger name="Info">
    <level value="ALL"/>
    <appender-ref ref="Info" />
  </logger>

  <logger name="InterfaceCall">
    <level value="ALL"/>
    <appender-ref ref="InterfaceCall" />
  </logger>

  <logger name="Error">
    <level value="ALL"/>
    <appender-ref ref="Error" />
  </logger>
 
  <root>
    <level value="ALL"/>
    <appender-ref ref="Info" />
    <appender-ref ref="ConsoleAppender" />
  </root>

</log4net>

  

  三大步之C:修改Program.cs文集中的方法,見紅色部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace IntegrateLog
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureLogging((hostingContext, builder) => { //builder.AddFilter(loglevel => loglevel >= LogLevel.Warning); //清楚自帶的Providers builder.ClearProviders(); builder.AddConsole(); builder.AddDebug(); builder.AddLog4Net("log4net.xml"); });
                });
    }
}

  看運行結果:

  控制台正常打印

  

 

 

   日志文件正常生成及寫入:

  

 

   如上,Log4Net就集成到項目中,原來項目中使用的日志邏輯不需要進行改變,一樣的寫法。接下來關注Log4Net即可;

總結

  本來想把Serilog也具體集成一下,想着步驟基本一樣,若需要Serilog集成的,可以參考以上Log4Net的思路。這樣集成了第三方日志框架,日志記錄就更加方便了,格式和存儲位置都可以任意配置,是不是很給力。

 關注公眾號,每周至少更新兩篇.NetCore相關文章

 

 

 

  

    


免責聲明!

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



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