不要用第三方日誌包了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
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...