Asp.Net Core NLog 將日誌輸出到資料庫以及添加LayoutRenderer的支持

来源:https://www.cnblogs.com/yyfh/archive/2018/05/22/9070833.html
-Advertisement-
Play Games

在這之前打算用Apache的Log4Net,但是發現其AdoNetAppender方法已經不存在了,無法使用配置文件直接輸出到資料庫了,因此我便改用了NLog框架。 一、對項目添加NLog 通過Nuget安裝NLog NLog.Extensions.Logging、NLog.Web.AspNetCo ...


         

        在這之前打算用Apache的Log4Net,但是發現其AdoNetAppender方法已經不存在了,無法使用配置文件直接輸出到資料庫了,因此我便改用了NLog框架。

        一、對項目添加NLog

通過Nuget安裝NLog NLog.Extensions.LoggingNLog.Web.AspNetCore     image

       二、對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"
       internalLogLevel="Trace"
       internalLogFile="internal-nlog.txt">
  <!-- define various log targets -->
   <targets>
    <!-- write logs to file -->
     <target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}"
/>


    <target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}
" />

    <target xsi:type="Null" name="blackhole" />

   <target name="database" xsi:type="Database">
       <connectionString>${var:connectionString}</connectionString>
       <commandText>
         INSERT INTO [dbo].[System_SqlLog]
         ([SqlLogId]
         ,[CreateUserId]
         ,[CreateUserCode]
         ,[CreateUserName]
         ,[CreateTime]
         ,[OperateSql]
         ,[EndDateTime]
         ,[ElapsedTime]
         ,[Parameter])
         VALUES
         (@SqlLogId
         ,@CreateUserId
         ,@CreateUserCode
         ,@CreateUserName
         ,@CreateTime
         ,@OperateSql
         ,@EndDateTime
         ,@ElapsedTime
         ,@Parameter);
       </commandText>
       <parameter name="@SqlLogId" layout="${event-context:item=SqlLogId}"/>
       <parameter name="@CreateUserId" layout="${event-context:item=CreateUserId}" />
       <parameter name="@CreateUserCode" layout="${event-context:item=CreateUserCode}"/>
       <parameter name="@CreateUserName" layout="${event-context:item=CreateUserName}"/>
       <parameter name="@CreateTime" layout="${event-context:item=CreateTime}"/>
       <parameter name="@OperateSql" layout="${event-context:item=OperateSql}" />
       <parameter name="@EndDateTime" layout="${event-context:item=EndDateTime}" />
       <parameter name="@ElapsedTime" layout="${event-context:item=ElapsedTime}" />
       <parameter name="@Parameter" layout="${event-context:item=Parameter}" />
     </target>
  </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="SqlLogToDatabase" minlevel="Debug" writeTo="database" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
   </rules>
</nlog>

複製代碼
  • Nlog節點如果設置 InternalLogLevel,internalLogFile 可以查看NLog輸出日誌時的內部信息,並且可以再裡面檢查配置文件錯誤等。
  • database target內可以指定connectionString,Sql語句,Sql參數等

         三、添加NLog到 .Net Core中

   image     image

       四、執行

   複製代碼

public virtual void WriteLog() {
            Logger iLog = LogManager.GetCurrentClassLogger();
            if (iLog.IsInfoEnabled) {
                LogEventInfo ei = new LogEventInfo(NLog.LogLevel.Info, "", "");
                ei.Properties["SqlLogId"] = CombUtil.NewComb();
                iLog.Info(ei);
            }
        }

複製代碼      這樣便可以將定義的值添加到資料庫中。

      五、LayoutRenderer的應用

     根據上面的操作並滿足不了我當前框架的應用,我所需要的是直接傳對象,但是直接iLog.Info(T);並不會獲取到值,他會獲取到空值。 在這裡操作的話就得需要自定義LayoutRenderer。 image     這個我們可以看出他是一個泛型方法,所以往裡面插入對象是可行的。下麵我說一下怎麼重寫LayoutRenderer。直接上代碼 image   Append會返回一個數據給當前調用者。然後我們再修改一下配置文件NLog.config。 image 並且我們還需要載入此程式集 image 這樣就會將對應的值插入到我們的資料庫中了。
  1. <targets/>定義日誌的目標/輸出
    1. type - 目標的類型 - 比如“File”,“Database”,“Mail”。如果你使用了名字空間,這個屬性會被命名為 xsi:type.
  2. <rules /> - 定義日誌的路由規則
  3. <extensions /> - 從*.dll載入NLog擴展
  4. <include /> - 導入外部配置文件
  5. <variable /> - 為配置變數賦值
 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 母版頁是一個擴展名為.master的ASP.NET文件,主要是為了應用程式創建統一的用戶功能界面和樣式。 ContentPlaceHolder控制項只能在母版頁中使用,在平常的web頁面使用,會發生解析器錯誤。 內容頁中可以有多個Content伺服器控制項,但內容頁里的Content控制項的Content ...
  • 一、課程介紹 本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的第五部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給大家進行學習,不斷的收集、整理和完善此系列課程! 本次分享課程適合人群如下: 1、想學習Grid++Report報表工具在C/S項目中的實戰演 ...
  • 今天我們來探索一下Singleton設計模式的實現及應用場景。 Singleton模式屬於Creational Type(創建型)設計模式的一種。該模式一般用於確保在應用中僅創建一個某類的instance,在應用中的各個地方對該類的實例對象的引用均指向同一instacne。 Singleton模式的 ...
  • 20180522更新內容 本次更新增加了excel導入導出示例,QuerySuite組件實現導出導出,用最少代碼,做最多的事,代碼就是如此簡單。 計劃修改內容 1、人臉登錄功能需要重構,目前功能不完善。 2、QuerySuite類重構,同時支持mysql,oracle 3、增加視頻處理功能。 4、分 ...
  • 背景: 個人電腦 安裝的 VS2015 Community 社區版。 一直用得挺好,都忘了要登錄。 直到近來,30天試用期過 —— VS彈窗:要登錄用戶名、密碼 才能繼續使用。 但是,輸入了無數次 郵箱,到下一步時,都彈出一個 白屏視窗 —— 死活沒法登錄成功。 登錄不成功,日子還得過。 尊重著作權 ...
  • 下載安裝 "Erlang" "RabbitMQ" 啟動RabbitMQ管理平臺插件 DOS下進入到安裝目錄\sbin,執行以下命令 當出現以下結果時,重啟RabbitMQ服務 訪問 "http://localhost:15672" (賬號密碼:guest) 註意:以下為C 代碼,請引用NuGet包: ...
  • 最近在做一個關於生成word文檔的功能,期間出現了幾個問題,也不算棘手,但是對於第一次使用office組件的人來說,就比較麻煩了,也不知道為何出現這個錯誤,其中本問題解決費的時間較多,特此記錄,以後方便查閱。 先將問題的場景大體介紹一下: 1、客戶端及服務端安裝的辦公軟體為wps; 2、已存在使用M ...
  • 現在新建的WTS模板,預設最低版本是16299了,目標版本是17134 17134到來之前,就感覺到會這樣,不過終究還是來了。 不支持15063的原因是導航菜單Windows.UI.Xaml.Controls.NavigationView變了,替代了之前的HamburgerMenu,加入了流暢元素。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...