• .net core 3.1 使用nlog进行日志记录


    1、添加NuGet

    NLog.Web.AspNetCore

    2、Program.cs 注入, UseNLog()

    1  public static IHostBuilder CreateHostBuilder(string[] args) =>
    2             Host.CreateDefaultBuilder(args)
    3                 .ConfigureWebHostDefaults(webBuilder =>
    4                 {
    5                     webBuilder.UseStartup<Startup>();
    6                 }).UseNLog();// 添加这句 注入nlog;

    3、创建nlog.config

    PS:这个是比较简单的版本,更复杂的信息大家自己研究

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info">
     3     <!-- 启用.net core的核心布局渲染器 -->
     4     <extensions>
     5         <add assembly="NLog.Web.AspNetCore" />
     6     </extensions>
     7     <!-- 写入日志的目标配置 -->
     8     <targets>
     9         <!-- 调试  -->
    10         <target xsi:type="File" name="debug" fileName="logs/debug-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
    11         <!-- 警告  -->
    12         <target xsi:type="File" name="warn" fileName="logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
    13         <!-- 错误  -->
    14         <target xsi:type="File" name="error" fileName="logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
    15     </targets>
    16     <!-- 映射规则 -->
    17     <rules>
    18         <!-- 调试  -->
    19         <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" />
    20         <!--跳过不重要的微软日志-->
    21         <logger name="Microsoft.*" maxlevel="Info" final="true" />
    22         <!-- 警告  -->
    23         <logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" />
    24          <!-- 错误  -->
    25         <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" />
    26     </rules>
    27 </nlog>

    4、使用

    1 public NLog.Logger log = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    2 
    3 log.Info("这是一个Info");
    4 log.Error(new Exception(), "这是一个Exception");
    5 log.Debug("这是一个Debug");

     此处说明下,参考其他的示例,在控制器中有通过构造函数方式注入的,如下所示:

     1     /// <summary>
     2     ///用户信息
     3     ///Print.Y
     4     /// </summary>
     5     [Route("api/[controller]/[action]")]
     6     [ApiController]
     7     public class UserController : BaseController
     8     {
     9         /// <summary>
    10         /// 日志
    11         /// </summary>
    12         private readonly ILogger<UserController> _logger;
    13 
    14         /// <summary>
    15         /// 构造函数
    16         /// </summary>
    17         /// <param name="logger"></param>
    18         public UserController(ILogger<UserController> logger)
    19         {
    20             _logger = logger;
    21         }
    22   }

     但是在使用的时候我发现,通过这种方式注入的,使用的是“Microsoft.Extensions.Logging”,并不是NLog,在使用上有个小问题:

      大家可以看到,并不能直接记录Exception因为没有一个参数且类型为“Exception”的重载,当然可以通过封装来实现,这里就不杠了... 个人比较喜欢用最上面的方式来进行nlog对象的实例化,然后进行使用。

    5、日志目录

    根据config中的配置,不同等级的信息存在不同的.log文件中,打开一个异常日志内容如下:

     信息显示还是比较全的,异常信息内容以及异常所在的controller action 以及行数都明确显示。

    PS:当前文章我是参考了很多网上的资料,然后进行学习和总结,最后和大家分享,如果有错误的地方还请批评指正。

    上面的Nlog配置文件放在webapi项目中,会有点问题,比较推荐下面这个配置:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
     3       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4       autoReload="true"
     5       throwConfigExceptions="true"        
     6       internalLogLevel="info"                        
     7       internalLogFile="E:logISPinternal-nlog.txt">
     8   <!--autoReload:修改后自动加载-->
     9   <!--throwConfigExceptions:NLog日志系统抛出异常-->
    10   <!--internalLogLevel:内部日志的级别-->
    11   <!--internalLogFile:内部日志保存路径,日志的内容大概就是NLog的版本信息,配置文件的地址等等-->
    12   
    13   <!-- the targets to write to -->
    14   <!--输出日志的配置,用于rules读取-->
    15   <targets>
    16     <!-- 将日志写入文件中  -->
    17     <target xsi:type="File" name="allfile"     fileName="E:logISP
    log-all-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
    18     <!--同样是将文件写入日志中,写入的内容有所差别,差别在layout属性中体现。写入日志的数量有差别,差别在路由逻辑中体现-->
    19     <target xsi:type="File" name="ownFile-web" fileName="E:logISP
    log-own-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
    20   </targets>
    21 
    22   <!-- rules to map from logger name to target -->
    23   <rules>
    24     <!--路由顺序会对日志打印产生影响。路由匹配逻辑为顺序匹配。-->
    25     <!--All logs, including from Microsoft-->
    26     <logger name="*" minlevel="Trace" writeTo="allfile" />
    27     <!--Skip non-critical Microsoft logs and so log only own logs-->
    28     <!--以Microsoft打头的日志将进入此路由,由于此路由没有writeTi属性,所有会被忽略-->
    29     <!--且此路由设置了final,所以当此路由被匹配到时。不会再匹配此路由下面的路由。未匹配到此路由时才会继续匹配下一个路由-->
    30     <logger name="Microsoft.*" maxlevel="Info" final="true" />
    31     <!-- BlackHole -->
    32     <!--上方已经过滤了所有Microsoft.*的日志,所以此处的日志只会打印除Microsoft.*外的日志-->
    33     <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    34   </rules>
    35 </nlog>
    View Code

    感谢:

    https://www.cnblogs.com/fancyblogs/p/12924263.html

    https://blog.csdn.net/fqydhk/article/details/104724445

    https://www.cnblogs.com/Kevin-Ni/p/9995894.html

  • 相关阅读:
    cs11_c++_lab4a
    cs11_c++_lab3
    cs11_c++_lab2
    cs11_c++_lab1
    Oracle 11.2.4.0 ACTIVE DATAGUARD 单实例安装(COPY创建备库)
    无备份恢复(归档模式)
    rman datafile恢复(归档模式)
    GHOST(幽灵)重大漏洞
    Windows Linux 之间rsync同步CODE文件
    Centos 6.5 SNMP客户端安装及配置版本net-snmp-5.7.3
  • 原文地址:https://www.cnblogs.com/PrintY/p/13513239.html
Copyright © 2020-2023  润新知