一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 在.NET 6中使用日志組件log4net的方法

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

2021-12-22 15:12搖曳de風箏 ASP.NET教程

本文詳細講解了Asp.Net Core中使用日志組件log4net的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

1.首先新建一個ASP.NET Core空項目

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

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

log4net

Microsoft.Extensions.Logging.Log4Net.AspNetCore

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

3.在項目根目錄下新建log4net的配置文件log4net.config,并將其設置為始終復制

<?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"/>
        <!--創建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數,設為"-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"/>
        <!--創建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數,設為"-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"/>
        <!--創建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數,設為"-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>
 
    <!-- 調試 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"/>
        <!--創建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--寫到一個文件-->
        <staticLogFileName value="false"/>
        <!--單個文件大小。單位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件數,設為"-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配置參數此處不多贅述,只針對日志的輸出格式參數conversionPattern配置做簡要說明。

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

4.在Program中使用log4net輸出自定義日志內容

using log4net;

var builder = WebApplication.CreateBuilder(args);
//注入Log4Net
builder.Services.AddLogging(cfg =>
{
    cfg.AddLog4Net();
    //默認的配置文件路徑是在根目錄,且文件名為log4net.config
    //如果文件路徑或名稱有變化,需要重新設置其路徑或名稱
    //比如在項目根目錄下創建一個名為cfg的文件夾,將log4net.config文件移入其中,并改名為log.config
    //則需要使用下面的代碼來進行配置
    //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.將項目運行起來,即可發現日志文件已生成

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

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

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

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

并且新建一個TestLog4Net的自定義類,繼承于ITestLog4Net,并實現該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".

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

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

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

到此這篇關于在.NET 6中使用日志組件log4net的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/pinzi/p/15588766.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产色图片 | 高h辣文小说网 烧书阁 | 亚洲精品资源 | 2020年新四虎免费 | nxgx在线观看国产中文 | 欧美一级片免费 | 久久不卡免费视频 | 久久久久久久久a免费 | 亚洲国产成人在线 | 亚洲精品AV无码喷奶水糖心 | 日本久久热 | 欧美同志网址 | free性丰满hd性欧美厨房 | 成年人免费在线看 | 欧美精品一区二区三区久久 | 秀婷程仪公欲息肉婷在线观看 | 久久一本综合 | 成人在线一区二区三区 | 青青青青青国产免费手机看视频 | 青青草在线播放 | yy3341殇情影院理论片 | 青草青草久热精品视频在线网站 | 日韩香蕉视频 | 国产精品一区二区在线观看完整版 | 亚洲高清在线天堂精品 | 国模丰满美女冰漪34d | www.亚洲色图 | 王小军怎么了最新消息 | 三级全黄裸体 | 我和寂寞孕妇的性事 | 欧美综合精品一区二区三区 | 欧洲老太玩小伙 | 夫妻性生活免费在线观看 | 国产精品永久免费10000 | japanhd粗暴video | 国产成人精品一区二三区2022 | 欧美日本一区视频免费 | 99热这里只有精品在线播放 | 18日本人 | 成人免费国产欧美日韩你懂的 | 黑帮大佬与我的365天2标清中文 |