C# 使用NLog記錄日誌入門操作

来源:https://www.cnblogs.com/hjsstudio/archive/2018/09/20/9683959.html
-Advertisement-
Play Games

環境:win7 64位, VS2010 1、首先用VS2010創建命令行工程NLogDemo 2、在程式包管理器控制臺中輸入:Install-Package NLog -Version 4.4.12 這句是怎麼來的,要是你用過nuget包管理工具,那就可以跳過這裡的說明瞭。 要使用nuget添加NL ...


 環境:win7 64位, VS2010

1、首先用VS2010創建命令行工程NLogDemo

2、在程式包管理器控制臺中輸入:Install-Package NLog -Version 4.4.12

  這句是怎麼來的,要是你用過nuget包管理工具,那就可以跳過這裡的說明瞭。

  要使用nuget添加NLog包到項目中。請看下圖。

 

然後在程式包管理工具控制臺下輸入:Install-Package NLog -Version 4.4.12

再看看Install-Package NLog -Version 4.4.12這個怎麼找。

打開百度搜索:Nuget

然後在Nuget官網上搜索欄輸入:Nlog 回車

選擇第一項Nlog

 

然後在 Version History 下選擇 4.4.12 這個版本

 

至於為什麼選擇這個版本,因為這個版本下載的次數多。嘿嘿,沒辦法,隨大流。當然還要看這個版本包的依賴項

這個包的沒有什麼特殊依賴項,所以可以使用。然後拷貝

 

 

 這裡這句話就是要我們要找的。是不是挺簡單的。

當我們在包程式包管理器控制臺中輸入:Install-Package NLog -Version 4.4.12 然後按下回車鍵,VS IDE 會自動到 nuget.org 這裡下載依賴包。

NLog 包添加完之後,還要添加 NLog.config(4.4.12)(Install-Package NLog.Config -Version 4.4.12) 這個包,按道理 NLog 和 NLog.config 應該一起的,

突然從某個版本開始分開了,要單獨添加。具體情況可以去官網看介紹:https://nlog-project.org/

 

添加 NLog.config 的方法跟上面添加 NLog 的方法一樣。

3、簡單封裝 Log

  添加類Log.cs到工程中,修改代碼如下:

public sealed class Log
{
    private static NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();

    private Log() { }

    public static void Trace(string strMsg)
    {
        _logger.Trace(strMsg);
    }

    public static void Debug(string strMsg)
    {
        _logger.Debug(strMsg);
    }

    public static void Info(string strMsg)
    {
        _logger.Info(strMsg);
    }

    public static void Warn(string strMsg)
    {
        _logger.Warn(strMsg);
    }

    public static void Error(string strMsg)
    {
        _logger.Error(strMsg);
    }

    public static void Fatal(string strMsg)
    {
        _logger.Fatal(strMsg);
    }

}

4、修改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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
    <!--
  <variable name="myvar" value="myvalue"/>
    -->
    <variable name="fileFormat"
            value="
            ${newline}date:${date}
            ${newline}level:${level}
            ${newline}logger:${logger}
            ${newline}machinename:${machinename}
            ${newline}message:${message}
            ${newline}appdomain:${appdomain}
            ${newline}assembly-version:${assembly-version}
            ${newline}basedir:${basedir}
            ${newline}callsite:${callsite}
            ${newline}counter:${counter}
            ${newline}nlogdir:${nlogdir}
            ${newline}processid:${processid}
            ${newline}processname:${processname}
            ${newline}specialfolder:${specialfolder}
            ${newline}stacktrace: ${stacktrace}
            ${newline}------------------------------------------------------------" />

  <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
  <targets>

    <!--
    add your targets here
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->

    <!--
    Write events to a file with the date in the filename.
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    -->

      <target name="file" xsi:type="File"
            fileName="${basedir}/Logs/${date:format=yyyy-MM}/${shortdate}.log"
            layout="${fileFormat}"
            maxArchiveFiles="5"
            archiveAboveSize="10240"
            archiveEvery="Day"/>
      
  </targets>

  <rules>
    <!-- add your logging rules here -->

    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->

    <!--
        Level    Example
        Fatal    Highest level: important stuff down
        Error    For example application crashes / exceptions.
        Warn    Incorrect behavior but the application can continue
        Info    Normal behavior like mail sent, user updated profile etc.
        Debug    Executed queries, user authenticated, session expired
        Trace    Begin method X, end method X etc
    -->
    <!--
        Logging 水平分為以下等級“Trace<<Debug<<Info<<Warn<<Error<<Fatal ”,如果我們選擇Info值,則Trace和Debug等級的信息不會被輸出。
    -->
     <logger name="*" minlevel="Trace" writeTo="file"/>
  </rules>
</nlog>

簡單解釋:

variable  log文件的內容輸出格式
targets 目標文件(要生成的Log文件)的配置(文件名、格式變數、文件個數、文件大小等等)
rules 規則,也就是俗話說的Log輸出級別

以上內容不進行過多解釋了,再多解釋也不如官網的說明。詳細介紹請看官網:https://github.com/nlog/NLog/wiki/Configuration-file#configuration-file-format

5、使用Log輸出日誌到文件,簡單示例代碼如下

class Program
{
    static void Main(string[] args)
    {
        RunTest();
        
        Console.WriteLine("Press a key end ...");
        Console.ReadKey(true);
    }

    static void RunTest()
    {
        for (int i = 0; i < 1000; i++)
        {
            Log.Info(string.Format("{0}", i + 1));

            System.Threading.Thread.Sleep(10);
        }
    }

}

輸出路徑結構

輸出文件內容:

以上內容輸出格式可以在NLog.config中根據需求進行裁剪。

demo下載

 


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

-Advertisement-
Play Games
更多相關文章
  • 字元串操作 一、輸出重覆字元串 二、通過引索輸出部分字元串 此處與之前的列表切片規則相同。 三、用in檢查字元串內容 若字元串中沒有對應的字元串,返回False 若字元串中有對應的字元串,返回True 四、格式字元串 通過這種方法可以更加靈活地使用字元串,方便修改句子內容而不改變固定部分。 五、字元 ...
  • 使用JDK開發WebServrice案例: 一、開發WebService伺服器端 第一步:創建Java工程 ,創建相應的包(服務端)使用JDK開發(1.6以上版本) 第二步:建一個介面WebServiceI,創建方法: package com.liuyongqi.WebService.service ...
  • 題目:輸入n,計算S = 1! + 2! +3! +...+ n!的末6位(不含前導0)。n ≤ 10^6,n!表示前n個正整數之積。 樣例輸入: 10 樣例輸出: 37913 【分析】引入累加變數S之後,核心演算法只有“for(int i = 1; i <= n; i++) S += i!”。不過, ...
  • 題目 m個蘋果放在n個盤子中有多少種結果,前置條件: 允許存在空盤 重覆的擺放結果忽略不計 根據題意,也就是有3種情況,的確完全重覆的擺放方式是沒多大意義的 思路 這題可以用枚舉的描述方式進行尾遞歸求解: 情況一: 存在一個空盤,甚至沒有蘋果或一個蘋果,直接返回 1 情況二: 連盤子或蘋果都沒有,直 ...
  • 1. 面向對象的概念,面向對象是一種編程思想。 是對現實世界中一類事物的抽象,在編程中可以理解為是一種建立現實世界事物的模型 2. 面向對象和麵向過程的區別: 面向過程關註的是完成工作的步驟。 面向對象關註的是誰能完成工作。 面向對象是在完成工作的時候關註哪些個體能夠完成對應的工作,找到對應的個體即 ...
  • 在做軟體的時候我們可能會遇到這樣的問題,就是在使用EF的時候,有時候精度不一樣, 我們用整數來計算肯定是比浮點數來得快的,但我在MySQL裡面存儲的數據類型是decimal的,我生成EF後, 裡面的數據模型變成了float,那麼這時候我們就需要對數據模型進行修改 1.首先,我們找到下麵這個 2.找到 ...
  • 在使用EF的情況下,可能也會存在說我有多個站點,同時去訪問一個資料庫,操作同一條數據的同一個值,那麼我們怎麼來進行事物的處理呢 有這麼一個很好的解決方式 EF6裡面提供了這麼一個方式來處理事物 Database.BeginTransaction() : 為用戶提供一種簡單易用的方案,在dbEntit ...
  • 首先也要明白一點,什麼是SQL註入 所謂SQL註入,就是通過把SQL命令插入到Web表單提交或輸入功能變數名稱或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程式,將(惡意的)SQL命令註入到後臺資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...