• .NET Core中使用NLog之基础使用


    在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试、查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.NET Core中使用NLog。

    1、创建项目(这里使用Core2.2)使用NLog

    2、引用NLog动态库

    直接在NuGet里面搜索NLog.Web.AspNetCore,然后进行安装即可,如下图所示:

    当前选的是4.13.0版本,安装完成如下图:

     

    3、修改Program类,在里面配置使用NLog,代码如下所示:

     public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                    // 配置使用NLog
                    .UseNLog();
    View Code

    4、添加Nlog配置文件,命名nlog.config如下图所示:

    5、nlog.config具体配置代码如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          autoReload="true"
          internalLogLevel="Warn"
          internalLogFile="internal-nlog.txt">
    
      <!--define various log targets-->
      <targets>
    
        <!--write logs to file-->
        <target xsi:type="File" name="allfile" fileName="NLog_Error/nlog-all-${shortdate}.log"
                     layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    
        <target xsi:type="File" name="ownFile-web" fileName="NLog_Error/nlog-my-${shortdate}.log"
                     layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    
        <target xsi:type="Null" name="blackhole" />
    
      </targets>
    
      <rules>
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />
    
        <!--Skip Microsoft logs and so log only own logs-->
        <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
        <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
      </rules>
    
    
    </nlog>

    6、添加完配置文件以后,我们还需要修改配置文件的属性,设置为始终复制,如下图所示:

    7、控制器中使用

    通过构造函数注入的方式实现注入。控制器代码如下:

            //通过构造函数注入的方式实现注入
            private readonly ILogger<HomeController> _logger;
            public HomeController(ILogger<HomeController> logger)
            {
                _logger = logger;
            }
    View Code

    Action使用Nlog写入日志

     public IActionResult Index()
            {
                _logger.LogError("这是Index错误信息");
                _logger.LogDebug("这是Index调试信息");
                _logger.LogInformation("这是Index提示信息");
    
                return View();
            }
    View Code

    8、访问Action测试Nlog,查看是否生成日志

    nlog.config 如果未指定具体位置,将会在项目文件下binDebug etcoreapp2.2的 NLog_Error文件下,如下图:

     

    可以看到,启动过程中的Microsoft日志也输出了,如果不想输出Microsoft日志,修改nlog.config里rules节点下面的路径规则顺序即可。

     

    9、读取指定位置的nlog.config文件

    一般情况类似的nlog.config配置文件,我们习惯性的放到单独的配置文件夹,比如我们新建个XMLConfig文件夹,然后把nlog.config文件移到到XmlConfig文件夹下面,移到后的结构如下图所示,我们要如何读取?其实只需要稍微调整下Program文件,在程序里面设置读取XmlConfig文件夹下面的nlog.config文件,代码如下:

     public static void Main(string[] args)
            {
                // 设置读取指定位置的nlog.config文件
                NLogBuilder.ConfigureNLog("XmlConfig/nlog.config");
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                    // 配置使用NLog
                    .UseNLog();
    View Code

    以上Core中使用Nlog基本完成,最后输出的日志格式是根据nlog.config配置文件里面的layout样式输出的,有时候输出的内容可能不满足我们的需求,因为这种日志看着比较难受,而且日志文件基本所有的Controller和Action都会需要用的,所以咋们是不是可以考虑做下封装,使用Filter过滤器注入到Startup类,全局使用,是不是更方便?

    下一篇咋们接着完善和优化,未完待续、、、

  • 相关阅读:
    新来一个技术总监:禁止戴耳机写代码,发现就扣绩效。。
    面试官:为什么数据库连接池不采用 IO 多路复用?我懵逼了。。
    重磅!Spring Boot 2.7 正式发布,一大波新特性,看完我彻底躺平了。。
    Spring Boot + Mybatis Plus + ClickHouse 轻松实现增删改查,看了必懂。。
    证书服务(一)非对称加密RSA,ssh使用密钥登录
    大叔问题定位分享(45)hive任务udf函数偶尔报错
    大叔经验分享(133)hive元数据中location修复
    大叔问题定位分享(44)kafka服务重启
    蒙东出图总结
    arcgis 栅格拼接
  • 原文地址:https://www.cnblogs.com/become/p/15065767.html
Copyright © 2020-2023  润新知