不要用第三方日誌包了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
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...