Net Core平臺靈活簡單的日志記錄框架NLog+Mysql組合初體驗

發布日期:2019-10-25

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中怎么用啊?

    用之前你得新建一個asp.net core項目吧。這里以net core api為例吧。如下圖所示是博主剛剛創建的net core api項目。

    建好項目之后干什么呢、當然得添加引用了。你可以隨心所欲的使用Nuget或者命令進行安裝

    Install-Package NLog -Version 4.5.7Install-Package NLog.Web.AspNetCore -Version 4.5.4

    上面說了,NLog只需要簡單地修改配置就可以使用,那接下來就是新建一個NLog配置文件了。你可以通過Nuget或者程序包控制臺進行安裝,也可以自己新建一個NLog.config文件。這里還是通過程序包控制臺進行安裝吧

    Install-Package NLog -Version 4.5.7

    安裝后看到項目目錄多了一個NLog.config文件。這里需要注意,右鍵設置一下這個NLog.config的屬性為“始終復制”

    打開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" 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>

    上面的代碼中我是以寫入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(); }

    在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>(); }

    下面就可以在代碼中愉快的玩耍了,

    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的返回信息"; }

    下面運行起來項目,然到數據庫里面就可以看到記錄的日志信息如下所示:

    這里大家可能會問,為什么沒有Debug信息輸出呢,這是因為我們上面NLog配置設置的記錄日志的最低級別為Info.所以比Info級別小的Debug信息不會記錄。如果想記錄的話就把這個級別設置成Debug或者比Debug小的Trace就可以記錄了。如下圖所示:

總結

本文開頭講述了分布式日志記錄框架Exceptionless部署困難說起,然后引出輕量級簡單易用的NLog日志框架,并通過一個簡單地api項目講述了NLog如何在Net Core中使用。并且給出了NLog日志記錄在mysql中的使用配置。以及mysql的建表語句。希望能對大家有所參考!

非洲五兽注册 上证指数年线是多少点1990至2018上证指数2019年上证指数年线图 贵阳小姐上门特服 手机网上麻将平台 cba即时比分直播文字直播 云南11选五5开奖 福州站街女分布 吉林十一选五开奖历 微乐棋牌官方网站 11选5山东开奖结 网球比分怎么看不懂 怎样申请微信麻将代理 明利配资 沈阳按摩店哪个好 辽宁11选5 日本和比分预测 大赢家足球即时指数