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

来源:https://www.cnblogs.com/yilezhu/archive/2018/08/03/9416439.html
-Advertisement-
Play Games

 Net Core平臺靈活簡單的日誌記錄框架NLog初體驗 前幾天分享的"[Net Core集成Exceptionless分散式日誌功能以及全局異常過濾][https://www.cnblogs.com/yilezhu/p/9339017.html]" 有人說比較重量,生產環境部署也比較麻煩。因此 ...


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文件,看看裡面的結構,發現有兩個重要節點,一個是

    <?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的建表語句。希望能對大家有所參考!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 6.1.爬取第一頁的職位信息 第一頁職位信息 6.2.爬取所有頁的職位信息 ...
  • DDOS攻擊的一些基礎知識點在這裡就不再贅述,由於Server端要控制client,所以這裡需要使用argparse,在這裡我們先規定好命令格式:#-H XXX.XXX.XXX.XXX -p xxxx -c<start|stop> -H後面接的是被攻擊主機的IP地址。 -p指定被攻擊的埠號。 -c ...
  • 異常在Java中有兩種分類:Error(OutOfMemoryError之類的我們自己程式無法處理的非常嚴重的錯誤,Java推薦不catch,讓程式隨之崩潰)、Excepiton(NullPointerException之類的並不致命的錯誤,Java覺得indicates conditions th ...
  • StringBuilder用法 StringBuilder str=new StringBuilder(); 和String用法的區別是 string 對象時恆定不變的,stringBuider對象表示的字元串是可變的。 StringBuilder 類提供了很多方法來操作字元串: 包裝類 基本數據類 ...
  • Spring5源碼解析-Spring框架中的單例和原型bean 最近一直有問我單例和原型bean的一些原理性問題,這裡就開一篇來說說的 通過Spring中的依賴註入極大方便了我們的開發。在xml通過<bean>定義(或者通過@Bean在配置類里定義)對象之後,然後只需簡單地使用@Autowired註 ...
  • python中有兩種數據類型:一種是可變數據類型,一種是不可變數據類型 不可變數據類型包括(整型及其他數據類型,字元串及元組) 可變數據類型(列表,集合,字典,類和類實例) 鑒定是否為拷貝還是只是引用計數加1,我們可以用python的內置函數(id())來驗證. 程式運行結果表明s和s1的記憶體地址是 ...
  • 1. Apache Kafka是一個分散式流平臺 1.1 流平臺有三個關鍵功能: 1.2 Kafka通常用於兩大類應用: 1.3 有幾個特別重要的概念: Kafka is run as a cluster on one or more servers that can span multiple d ...
  • 一:定義 對於代碼塊和功能的封裝和定義 二:函數的定義, 函數名, 函數體以及函數的調用 我們使用def關鍵字來定義函數, 函數的定義語法: 函數名的命名規則和變數基本一致, 函數體就是函數被執行之後要執行的代碼 函數名()的形式用來調用函數. 三:函數的返回 return關鍵字會中斷函數,並返回一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...