最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在.NET?6中使用日志組件log4net的方法

 更新時間:2021年11月23日 10:43:11   作者:搖曳de風(fēng)箏  
本文詳細(xì)講解了Asp.Net?Core中使用日志組件log4net的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本文將簡單介紹在.NET 6中使用log4net的方法,具體見下文范例。

1.首先新建一個ASP.NET Core空項(xiàng)目

2.通過Nuget包管理器安裝下面兩個包

log4net

Microsoft.Extensions.Logging.Log4Net.AspNetCore

3.在項(xiàng)目根目錄下新建log4net的配置文件log4net.config,并將其設(shè)置為始終復(fù)制。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <!--根配置-->
    <root>
        <!--日志級別:可選值: ERROR > WARN > INFO > DEBUG -->
        <level value="ERROR"/>
        <level value="WARN"/>
        <level value="INFO"/>
        <level value="DEBUG"/>
        <appender-ref ref="ErrorLog" />
        <appender-ref ref="WarnLog" />
        <appender-ref ref="InfoLog" />
        <appender-ref ref="DebugLog" />
    </root>
    <!-- 錯誤 Error.log-->
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
        <!--目錄路徑,可以是相對路徑或絕對路徑-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夾-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--創(chuàng)建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數(shù),設(shè)為"-1"則不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
    </appender>
 
    <!-- 警告 Warn.log-->
    <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
        <!--目錄路徑,可以是相對路徑或絕對路徑-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夾-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--創(chuàng)建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數(shù),設(shè)為"-1"則不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="WARN" />
            <param name="LevelMax" value="WARN" />
        </filter>
    </appender>
 
    <!-- 信息 Info.log-->
    <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
        <!--目錄路徑,可以是相對路徑或絕對路徑-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夾-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--創(chuàng)建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數(shù),設(shè)為"-1"則不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="INFO" />
            <param name="LevelMax" value="INFO" />
        </filter>
    </appender>
 
    <!-- 調(diào)試 Debug.log-->
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
        <!--目錄路徑,可以是相對路徑或絕對路徑-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夾-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--創(chuàng)建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數(shù),設(shè)為"-1"則不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="DEBUG" />
        </filter>
    </appender>
 
</log4net>

log4net配置參數(shù)此處不多贅述,只針對日志的輸出格式參數(shù)conversionPattern配置做簡要說明。

%M      輸出日志方法名
%m      輸出日志消息內(nèi)容
%p      輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r      輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
%c      輸出所屬的類目,通常就是所在類的全名
%t      輸出產(chǎn)生該日志事件的線程名
%n      輸出一個換行符
%l或%L  輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。
%c      輸出日志信息所屬的類的全名
%d      輸出完整的日志時間點(diǎn)的日期時間,支持自定義格式。比如:%d{HH:mm:ss},輸出類似:22:10:28
%f      輸出日志信息所屬的類的類名

4.在Program中使用log4net輸出自定義日志內(nèi)容

using log4net;

var builder = WebApplication.CreateBuilder(args);
//注入Log4Net
builder.Services.AddLogging(cfg =>
{
    cfg.AddLog4Net();
    //默認(rèn)的配置文件路徑是在根目錄,且文件名為log4net.config
    //如果文件路徑或名稱有變化,需要重新設(shè)置其路徑或名稱
    //比如在項(xiàng)目根目錄下創(chuàng)建一個名為cfg的文件夾,將log4net.config文件移入其中,并改名為log.config
    //則需要使用下面的代碼來進(jìn)行配置
    //cfg.AddLog4Net(new Log4NetProviderOptions()
    //{
    //    Log4NetConfigFileName = "cfg/log.config",
    //    Watch = true
    //});
});
var app = builder.Build();
//訪問根頁面時
app.MapGet("/", (ILogger<Program> logger) =>
{
    logger.LogInformation("logger:測試一下Log4Net=》Info");
    return "Hello World!";
});
//訪問test頁面時
app.MapGet("/test", () =>
{
    var log = LogManager.GetLogger(typeof(Program));
    log.Info("log:這是一條普通日志信息");
});
app.Run();

5.將項(xiàng)目運(yùn)行起來,即可發(fā)現(xiàn)日志文件已生成

6.擴(kuò)展使用:使用簡單工廠模式IOC注入到自定義類中使用

新建一個ITestLog4Net接口文件,并為其定義一個Log方法。

并且新建一個TestLog4Net的自定義類,繼承于ITestLog4Net,并實(shí)現(xiàn)該Log方法。

在Program中注入我們的自定義類TestLog4Net

builder.Services.AddTransient<ITestLog4Net, TestLog4Net>();
testLog4Net.Log();

使用方法

var testLog4Net = app.Services.GetService<ITestLog4Net>()!;

或者

var services = new ServiceCollection()!;
var provider = services.BuildServiceProvider()!;
var testLog4Net = provider.GetService<ITestLog4Net>()!;
testLog4Net.Log();

其中,使用下面這種寫法,將會收到一個編譯警告信息。

warning ASP0000: Calling 'BuildServiceProvider' from application code results in an additional copy of singleton services being created. Consider alternatives such as dependency injecting services as parameters to 'Configure'.

推薦使用上面的寫法,百度之后,得到的答案是:不要通過調(diào)用BuildServiceProvider()這個方法應(yīng)該只被 Host 調(diào)用一次。重復(fù)的服務(wù)提供者可能會導(dǎo)致一些意想不到的錯誤。如果有哪位大佬知道具體原因,請告知一下,謝謝!

Tips:代碼中的感嘆號!表示該對象不會為空,一定要確保該對象不會為空才能這樣寫,這是C#10中的新特性。

到此這篇關(guān)于在.NET 6中使用日志組件log4net的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET實(shí)現(xiàn)WebSocket服務(wù)端即時通信實(shí)例

    .NET實(shí)現(xiàn)WebSocket服務(wù)端即時通信實(shí)例

    本篇文章主要介紹了.NET實(shí)現(xiàn)即時通信,WebSocket服務(wù)端實(shí)例 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • ASP.NET中頁面之間傳遞值的幾種方式整理

    ASP.NET中頁面之間傳遞值的幾種方式整理

    頁面?zhèn)髦凳菍W(xué)習(xí)asp.net初期都會面臨的一個問題,總的來說有頁面?zhèn)髦?、存儲對象傳值、ajax、類、model、表單等,這里簡單的整理下,需要的朋友可以收藏下
    2012-05-05
  • .NET Core API之格式化輸出對象OutputFormatter

    .NET Core API之格式化輸出對象OutputFormatter

    這篇文章介紹了.NET Core API之格式化輸出對象OutputFormatter,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • .Net Core WebApi部署到Windows服務(wù)器上的步驟

    .Net Core WebApi部署到Windows服務(wù)器上的步驟

    這篇文章主要介紹了.Net Core WebApi部署到Windows服務(wù)器上的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • VS2008無法直接查看STL值的解決方法

    VS2008無法直接查看STL值的解決方法

    這篇文章主要為大家詳細(xì)介紹了VS2008無法直接查看STL值的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • ASP.NET返回上一頁面的實(shí)現(xiàn)代碼

    ASP.NET返回上一頁面的實(shí)現(xiàn)代碼

    今天用ASP.NET做一個類似淘寶中的訂單管理系統(tǒng),遇到的問題:主界面通過一個超鏈接跳轉(zhuǎn)到子界面后,試了好長時間還是無法從子界面返回主界面。
    2011-04-04
  • .NET6?ConfigurationManager的實(shí)現(xiàn)及使用方式

    .NET6?ConfigurationManager的實(shí)現(xiàn)及使用方式

    這篇文章主要介紹了.NET6?ConfigurationManager的實(shí)現(xiàn),我們上面展示的這一部分的ConfigurationManager代碼,其實(shí)就是替代了原來的ConfigurationBuilder類的功能,需要的朋友可以參考下
    2021-12-12
  • .NET6自定義WebAPI過濾器

    .NET6自定義WebAPI過濾器

    這篇文章介紹了.NET6自定義WebAPI過濾器的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • ASP.NET向Javascript傳遞變量兩種實(shí)現(xiàn)方法

    ASP.NET向Javascript傳遞變量兩種實(shí)現(xiàn)方法

    ASP.NET向Javascript傳遞變量兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2012-12-12
  • .net MVC使用Session驗(yàn)證用戶登錄(4)

    .net MVC使用Session驗(yàn)證用戶登錄(4)

    這篇文章主要為大家詳細(xì)介紹了.net MVC使用Session驗(yàn)證用戶登錄的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論

宜昌市| 大竹县| 穆棱市| 孟村| 渝北区| 霍林郭勒市| 木里| 昌宁县| 商都县| 扎赉特旗| 青田县| 梧州市| 垦利县| 西平县| 武功县| 丁青县| 分宜县| 秦皇岛市| 黄浦区| 青龙| 方城县| 文化| 类乌齐县| 乐昌市| 澜沧| 淮安市| 张家港市| 成武县| 东城区| 定南县| 蒲城县| 轮台县| 康保县| 济阳县| 新巴尔虎右旗| 获嘉县| 松潘县| 通道| 乾安县| 文登市| 邢台县|