Asp.Net 6中使用Log4Net
1. 先新建一個(gè)ASP.NET Core空項(xiàng)目
2. 通過(guò)Nuget包管理器安裝下面兩個(gè)包
log4net
Microsoft.Extensions.Logging.Log4Net.AspNetCore
3. 在項(xiàng)目根目錄下新建log4net的配置文件log4net.config,并將其設(shè)置為始終復(fù)制。
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!--根配置-->
<root>
<!--日志級(jí)別:可選值: 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>
<!-- 錯(cuò)誤 Error.log-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!--目錄路徑,可以是相對(duì)路徑或絕對(duì)路徑-->
<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"/>
<!--寫(xiě)到一個(gè)文件-->
<staticLogFileName value="false"/>
<!--單個(gè)文件大小。單位: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">
<!--目錄路徑,可以是相對(duì)路徑或絕對(duì)路徑-->
<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"/>
<!--寫(xiě)到一個(gè)文件-->
<staticLogFileName value="false"/>
<!--單個(gè)文件大小。單位: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">
<!--目錄路徑,可以是相對(duì)路徑或絕對(duì)路徑-->
<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"/>
<!--寫(xiě)到一個(gè)文件-->
<staticLogFileName value="false"/>
<!--單個(gè)文件大小。單位: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">
<!--目錄路徑,可以是相對(duì)路徑或絕對(duì)路徑-->
<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"/>
<!--寫(xiě)到一個(gè)文件-->
<staticLogFileName value="false"/>
<!--單個(gè)文件大小。單位: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ù)此處不多贅述,只針對(duì)日志的輸出格式參數(shù)conversionPattern配置做簡(jiǎn)要說(shuō)明。
%M 輸出日志方法名
%m 輸出日志消息內(nèi)容
%p 輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
%c 輸出所屬的類(lèi)目,通常就是所在類(lèi)的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個(gè)換行符
%l或%L 輸出日志事件的發(fā)生位置,包括類(lèi)目名、發(fā)生的線程,以及在代碼中的行數(shù)。
%c 輸出日志信息所屬的類(lèi)的全名
%d 輸出完整的日志時(shí)間點(diǎn)的日期時(shí)間,支持自定義格式。比如:%d{HH:mm:ss},輸出類(lèi)似:22:10:28
%f 輸出日志信息所屬的類(lèi)的類(lèi)名
4. 在Program中使用log4net輸出自定義日志內(nèi)容
using log4net;
var builder = WebApplication.CreateBuilder(args);
//注入Log4Net
builder.Services.AddLogging(cfg =>
{
cfg.AddLog4Net();
//默認(rèn)的配置文件路徑是在根目錄,且文件名為log4net.config
//如果文件路徑或名稱(chēng)有變化,需要重新設(shè)置其路徑或名稱(chēng)
//比如在項(xiàng)目根目錄下創(chuàng)建一個(gè)名為cfg的文件夾,將log4net.config文件移入其中,并改名為log.config
//則需要使用下面的代碼來(lái)進(jìn)行配置
//cfg.AddLog4Net(new Log4NetProviderOptions()
//{
// Log4NetConfigFileName = "cfg/log.config",
// Watch = true
//});
});
var app = builder.Build();
//訪問(wèn)根頁(yè)面時(shí)
app.MapGet("/", (ILogger<Program> logger) =>
{
logger.LogInformation("logger:測(cè)試一下Log4Net=》Info");
return "Hello World!";
});
//訪問(wèn)test頁(yè)面時(shí)
app.MapGet("/test", () =>
{
var log = LogManager.GetLogger(typeof(Program));
log.Info("log:這是一條普通日志信息");
});
app.Run();
5. 將項(xiàng)目運(yùn)行起來(lái),即可發(fā)現(xiàn)日志文件已生成
6. 擴(kuò)展使用:使用簡(jiǎn)單工廠模式IOC注入到自定義類(lèi)中使用
新建一個(gè)ITestLog4Net接口文件,并為其定義一個(gè)Log方法
public interface ITestLog4Net
{
public void Log();
}
并且新建一個(gè)TestLog4Net的自定義類(lèi),繼承于ITestLog4Net,并實(shí)現(xiàn)該Log方法。
public class TestLog4Net : ITestLog4Net
{
private readonly ILogger<TestLog4Net> _logger;
public TestLog4Net(ILogger<TestLog4Net> logger)
{
_logger = logger;
_logger.LogInformation("ctor測(cè)試一下Log4Net=》Info");
}
public void Log()
{
_logger.LogInformation("測(cè)試一下Log4Net=》Info");
}
}
在Program中注入我們的自定義類(lèi)TestLog4Net
builder.Services.AddTransient<ITestLog4Net, TestLog4Net>();
使用方法文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-608287.html
var testLog4Net = app.Services.GetService<ITestLog4Net>()!;
testLog4Net.Log();
或者文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-608287.html
var services = new ServiceCollection()!;
var provider = services.BuildServiceProvider()!;
var testLog4Net = provider.GetService<ITestLog4Net>()!;
testLog4Net.Log();
到了這里,關(guān)于Asp.Net 6中使用Log4Net的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!