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

      

        

  • 相关阅读:
    vector
    codeforces 1453D. Checkpoints
    [ICPC2019 WF]Hobson's Trains
    [ICPC2019 WF]Circular DNA
    计算几何板子
    CSP-S2020 贪吃蛇(洛谷民间数据)
    CSP-S2020 函数调用(洛谷民间数据)
    [NOI Online #3 提高组]魔法值
    [NOI Online #1 提高组]冒泡排序
    佳能m62套机5500 佳能EOS M50 M6 MARK2 II二代 最低到过5800
  • 原文地址:https://www.cnblogs.com/zoe-zyq/p/12900636.html
Copyright © 2020-2023  润新知