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相关文章

 

 

 

  

    

posted @ 2020-05-16 15:13  Code综艺圈  阅读(3172)  评论(0编辑  收藏  举报