不要用第三方日誌包了Microsoft.Extensions.Logging功能就很強大

来源:https://www.cnblogs.com/hanbing81868164/archive/2023/12/05/17877888.html
-Advertisement-
Play Games

在.NET中,Microsoft.Extensions.Logging是一個廣泛使用的日誌庫,用於記錄應用程式的日誌信息。它提供了豐富的功能和靈活性,使開發人員能夠輕鬆地記錄各種類型的日誌,並將其輸出到不同的目標,包括日誌文件。本文將詳細介紹Microsoft.Extensions.Logging的 ...


在.NET中,
Microsoft.Extensions.Logging是一個廣泛使用的日誌庫,用於記錄應用程式的日誌信息。它提供了豐富的功能和靈活性,使開發人員能夠輕鬆地記錄各種類型的日誌,並將其輸出到不同的目標,包括日誌文件。本文將詳細介紹Microsoft.Extensions.Logging的各種基礎功能以及如何按天生成日誌文件。

一、Microsoft.Extensions.Logging基礎功能

1. 創建Logger

首先,我們需要創建一個Logger實例,以便在應用程式中記錄日誌。以下是創建Logger的基本方法:

using Microsoft.Extensions.Logging;

var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole(); // 輸出日誌到控制台
});

var logger = loggerFactory.CreateLogger<Program>();

在上面的示例中,我們首先創建了一個LoggerFactory實例,然後通過它創建了一個Logger。我們還使用AddConsole方法將日誌輸出到控制台。

2. 記錄日誌消息

一旦有Logger實例,我們可以使用它來記錄不同級別的日誌消息。
Microsoft.Extensions.Logging定義了以下日誌級別(按嚴重性遞增排列):

  • Trace
  • Debug
  • Information
  • Warning
  • Error
  • Critical

下麵是如何使用Logger記錄不同級別的日誌消息的示例:

logger.LogInformation("這是一條信息日誌");
logger.LogWarning("這是一條警告日誌");
logger.LogError("這是一條錯誤日誌");
logger.LogCritical("這是一條嚴重錯誤日誌");

3. 提供上下文信息

通常,我們需要將一些上下文信息記錄到日誌中,以幫助排查問題。可以使用LogInformation等方法的重載版本,傳遞額外的參數,如下:

var userId = 123;
logger.LogInformation("用戶 {UserId} 登錄成功", userId);

在上述示例中,我們將userId作為參數傳遞給日誌消息,以便將其包含在日誌中。

4. 使用日誌範圍

有時,我們希望在一段代碼塊中記錄一組相關日誌消息,並希望這些消息具有相同的上下文信息。這時可以使用LogScope,如下所示:

using (logger.BeginScope("交易處理 - 訂單 {OrderId}", orderId))
{
    logger.LogInformation("訂單處理中...");
    // 執行一些訂單處理邏輯
    logger.LogInformation("訂單處理完成");
}

在上述示例中,我們使用BeginScope方法創建了一個日誌範圍,將其包含在指定的上下文信息中。在範圍內的所有日誌消息都會自動包含這些上下文信息。

5. 配置日誌級別

我們可以在應用程式中配置所需的最低日誌級別,以決定哪些日誌消息將被記錄。通常,這是在應用程式的配置文件中完成的。以下是一個示例:

var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole();
    builder.SetMinimumLevel(LogLevel.Information); // 設置最低日誌級別
});

在上述示例中,我們使用SetMinimumLevel方法來配置最低日誌級別。只有達到或高於指定級別的日誌消息才會被記錄。

二、按天生成日誌文件

現在,讓我們來看看如何按天生成日誌文件。通常,我們會希望將日誌消息記錄到文件中,並按日期對日誌文件進行歸檔。

1. 安裝相關包

首先,我們需要安裝一些必要的包,以便實現按天生成日誌文件。使用NuGet包管理器或.NET CLI可以輕鬆完成這一步驟:

dotnet add package Karambolo.Extensions.Logging.File

2. 配置文件日誌提供程式

接下來,我們需要配置文件日誌提供程式,以便將日誌消息記錄到文件中。以下是如何配置文件提供程式的示例:

var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddFile("logs/myapp-{Date}.txt");
    builder.SetMinimumLevel(LogLevel.Information);
});

在上述示例中,我們使用AddFile方法配置文件日誌提供程式,並指定日誌文件的名稱模式。{Date}將根據日誌消息的日期自動替換為實際日期。

3. 示例代碼

以下是一個完整的示例代碼,演示瞭如何使用
Microsoft.Extensions.Logging按天生成日誌文件:

using System;
using Microsoft.Extensions.Logging;
using Karambolo.Extensions.Logging.File;

class Program
{
    static void Main()
    {
        var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddFile("logs/myapp-{Date}.txt");
            builder.SetMinimumLevel(LogLevel.Information);
        });

        var logger = loggerFactory.CreateLogger<Program>();

        for (int i = 0; i < 10; i++)
        {
            logger.LogInformation("這是一條信息日誌 - {LogCount}", i);
        }
    }
}

上述示例中,我們配置了文件日誌提供程式,日誌文件的名稱模式包含了{Date},並迴圈記錄了10條日誌消息。每天,日誌文件將被歸檔到不同的文件中,以便跟蹤和檢查以前的日誌。


Microsoft.Extensions.Logging是.NET中強大的日誌庫,可以用於記錄各種類型的日誌消息。通過配置文件日誌提供程式,我們可以按天生成日誌文件,以便更好地管理和分析日誌。

 


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

-Advertisement-
Play Games
更多相關文章
  • 9 Docker 在 Docker 鏡像層內預覽文件 現在可以在 Services(服務)工具視窗中輕鬆訪問和預覽 Docker 鏡像層的內容。 從列表選擇鏡像,選擇 Show layers(顯示層),然後點擊 Analyze image for more information(分析鏡像以獲得更多 ...
  • 原文: https://openaigptguide.com/chatgpt-similar%20software/ ChatGPT是一款由美國OpenAI公司開發的人工智慧語言模型,類似的軟體有: 火山寫作(Volcano Writing):它是一款用戶友好的寫作軟體,可以自動生成具有創造性和連貫 ...
  • 前言 我python開發的GUI界面(圖形用戶界面)一直是tkinter,打包exe一直是Pyinstaller。但是打包出來的exe圖標、狀態欄圖標、窗體左上角圖標一直是預設的羽毛,我想自定義。 效果 最後使用base64創建臨時ico解決了該問題 步驟 創建icoToBase64.py,內容如下 ...
  • 在Java 21中,除了推出很多新特性之外,一些Bug修複,也需要註意一下。因為這些改變可能在升級的時候,造成影響。 Double.toString()和Float.toString()的精度問題修複 比如:對於Double.String(1e23): 在Java 19後,輸出內容為:1.0E23 ...
  • webjars類型的前端jar包 我們可以將公用的js,css,html,vue,shtml打包成一個jar,然後在其他項目中引用,這樣就不用每個項目都去引用一遍了,這樣就可以實現前端的公用了。 1.創建一個maven項目,添加依賴和插件 <dependencies> <!-- 依賴webjars- ...
  • pdf轉docx文檔是一個非常實用的功能,我只是簡單地實現了一個可視化界面供用戶操作。我這麼做的目的之一是想更多地掌握gradio的使用方法,同時也加強對Python流行第三方包的熟悉程度,因為這些第三方包是快速開發的關鍵。我也希望你能從中有所收穫,我已經公佈了本期的源碼地址,如果你覺得還不錯,或者... ...
  • 1. 什麼是Mvc 模型-視圖-控制器 (MVC) 體繫結構模式將應用程式分成 3 個主要組件組:視圖模型、視圖和控制器。 此模式有助於實現關註點分離。 使用此模式,用戶請求被路由到控制器,後者負責使用模型來執行用戶操作和/或檢索查詢結果。 控制器選擇要顯示給用戶的視圖,併為其提供所需的任何模型數據 ...
  • Options是微軟提供的選項模塊,該模塊依賴於容器使用。除了微軟的IServiceCollection,當然也可以使用其它的依賴註入容器。本文演示如何在prism中使用Options。 創建應用項目 創建一個Avalonia應用(或其它類型應用),然後使用NuGet包管理器添加Prism.DryI ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...