Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

# Net Core平台灵活简单的日志记录框架NLog初体验

前几天分享的”[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblogs.com/yilezhu/p/9339017.html]” 有人说比较重量,生产环境部署也比较麻烦。因此就有了今天的这篇文章。如果你的项目(网站或者中小型项目)不是很大,日志量也不多的话可以考虑NLog+Mysql的组合。因为NLog具有高性能,易于使用,易于扩展和灵活配置的特点能够让你快速集成日志记录功能。
作者:yilezhu
本文链接 :https://www.cnblogs.com/yilezhu/p/9416439.html

NLog是什么?

这里还是简单介绍一下吧,为了让小白也知道。NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET Core。NLog可以通过简单地配置就可以可以很方便的写入多个日志仓库中(数据库,文件,控制台)。

NLog在Net Core中怎么用啊?

  1. 用之前你得新建一个asp.net core项目吧。这里以net core api为例吧。如下图所示是博主刚刚创建的net core api项目。

net core api项目

  1. 建好项目之后干什么呢、当然得添加引用了。你可以随心所欲的使用Nuget或者命令进行安装

    Install-Package NLog -Version 4.5.7
    Install-Package NLog.Web.AspNetCore -Version 4.5.4
  2. 上面说了,NLog只需要简单地修改配置就可以使用,那接下来就是新建一个NLog配置文件了。你可以通过Nuget或者程序包控制台进行安装,也可以自己新建一个NLog.config文件。这里还是通过程序包控制台进行安装吧

    Install-Package NLog -Version 4.5.7

    安装后看到项目目录多了一个NLog.config文件。这里需要注意,右键设置一下这个NLog.config的属性为“始终复制”

    1532873688872

  3. 打开Nlog.config文件,看看里面的结构,发现有两个重要节点,一个是声明目标 一个是声明规则。如下图所示,我配置了一个写入文件,一个写入mysql的target.并定义了不同的写入规则,大家可以根据实际需要参照着自定义规则以及target.

    <?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"
         throwExceptions="true"
         internalLogLevel="Off">
     <targets>
       <target xsi:type="Null" name="blackhole" />
       <target name="database" xsi:type="Database"
                 dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
                 connectionString="server=127.0.0.1;Database=nlog;user id=root;password=123456;SslMode=none"
                >
         <!--
    CREATE TABLE `log` (
     `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `Application` varchar(50) DEFAULT NULL,
     `Logged` datetime DEFAULT NULL,
     `Level` varchar(50) DEFAULT NULL,
     `Message` varchar(512) DEFAULT NULL,
     `Logger` varchar(250) DEFAULT NULL,
     `Callsite` varchar(512) DEFAULT NULL,
     `Exception` varchar(512) DEFAULT NULL,
     PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    -->
         <commandText>
           insert into nlog.log (
           Application, Logged, Level, Message,
           Logger, CallSite, Exception
           ) values (
           @Application, @Logged, @Level, @Message,
           @Logger, @Callsite, @Exception
           );
         </commandText>
         <parameter name="@application" layout="NLogTestDemo" />
         <parameter name="@logged" layout="${date}" />
         <parameter name="@level" layout="${level}" />
         <parameter name="@message" layout="${message}" />
         <parameter name="@logger" layout="${logger}" />
         <parameter name="@callSite" layout="${callsite:filename=true}" />
         <parameter name="@exception" layout="${exception:tostring}" />
       </target>
    
     </targets>
    
     <rules>
       <!--Skip Microsoft logs and so log only own logs-->
       <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
       <logger name="NLogTestDemo.*" minlevel="Info" writeTo="database" />
     </rules>
    </nlog>
  4. 上面的代码中我是以写入mysql为例进行的NLog配置。下面就可以进行简单地使用了。首先需要在。首先在Startup中的Configure中来加入中间件:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
           {
               if (env.IsDevelopment())
               {
                   app.UseDeveloperExceptionPage();
               }
    
               //使用NLog作为日志记录工具
               loggerFactory.AddNLog();
               //引入Nlog配置文件
               env.ConfigureNLog("Nlog.config");
               //app.AddNLogWeb();
               app.UseMvc();
           }
  5. 在Program中进行如下配置:

    public class Program
       {
           public static void Main(string[] args)
           {
               CreateWebHostBuilder(args).Build().Run();
           }
    
           public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
               WebHost.CreateDefaultBuilder(args)
               .UseNLog()
                   .UseStartup<Startup>();
       }
  6. 下面就可以在代码中愉快的玩耍了,

     private readonly Logger nlog = LogManager.GetCurrentClassLogger(); //获得日志实;
    
           // GET api/values
           [HttpGet]
           public ActionResult<string> Get()
           {
               nlog.Log(NLog.LogLevel.Debug, $"yilezhu测试Debug日志");
               nlog.Log(NLog.LogLevel.Info, $"yilezhu测试Info日志");
               try
               {
                   throw new Exception($"yilezhu故意抛出的异常");
               }
               catch (Exception ex)
               {
    
                   nlog.Log(NLog.LogLevel.Error, ex, $"yilezhu异常的额外信息");
               }
               return "yilezhu的返回信息";
           }
  7. 下面运行起来项目,然到数据库里面就可以看到记录的日志信息如下所示:

    1533303655993

    这里大家可能会问,为什么没有Debug信息输出呢,这是因为我们上面NLog配置设置的记录日志的最低级别为Info.所以比Info级别小的Debug信息不会记录。如果想记录的话就把这个级别设置成Debug或者比Debug小的Trace就可以记录了。如下图所示:

    1533303848950

总结

本文开头讲述了分布式日志记录框架Exceptionless部署困难说起,然后引出轻量级简单易用的NLog日志框架,并通过一个简单地api项目讲述了NLog如何在Net Core中使用。并且给出了NLog日志记录在mysql中的使用配置。以及mysql的建表语句。希望能对大家有所参考!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值