1.首先下載log4ne的包:
2.添加配置文件log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志輸入路徑-->
<file value="ErrorLog/" />
<!--日志是否追加到文件-->
<appendToFile value="true" />
<!--按照何種方式產(chǎn)生多個日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite" />
<!--是否只寫到一個文件中-->
<staticLogFileName value="false" />
<!--防止多線程時不能寫Log,官方說線程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--按日期命名文件-->
<datePattern value="yyyyMMdd'.log'" />
<!--最多產(chǎn)生文件數(shù)超過的話保留最新-->
<maxSizeRollBackups value="100" />
<!--每個文件的大小。只在混合方式與文件大小方式下使用。超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?span id="n5n3t3z" class="token punctuation">:KB|MB|GB。不要使用小數(shù),否則會一直寫入當前日志-->
<maximumFileSize value="50MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
<header value="
----------------------header--------------------------
" />
<footer value="
----------------------footer--------------------------
"/>
</layout>
<!--定義日志級別根據(jù)不同的級別調(diào)用不同的配置寫入-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Error" />
<param name="LevelMax" value="Error" />
</filter>
</appender>
<appender name="DeBugLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志輸入路徑-->
<file value="DeBugLog/" />
<!--日志是否追加到文件-->
<appendToFile value="true" />
<!--按照何種方式產(chǎn)生多個日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite" />
<!--是否只寫到一個文件中-->
<staticLogFileName value="false" />
<!--防止多線程時不能寫Log,官方說線程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--按日期命名文件-->
<datePattern value="yyyyMMdd'.log'" />
<!--最多產(chǎn)生文件數(shù)超過的話保留最新-->
<maxSizeRollBackups value="100" />
<!--每個文件的大小。只在混合方式與文件大小方式下使用。超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?span id="n5n3t3z" class="token punctuation">:KB|MB|GB。不要使用小數(shù),否則會一直寫入當前日志-->
<maximumFileSize value="50MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
<header value="
----------------------header--------------------------
" />
<footer value="
----------------------footer--------------------------
"/>
</layout>
<!--定義日志級別根據(jù)不同的級別調(diào)用不同的配置寫入-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DeBug" />
<param name="LevelMax" value="DeBug" />
</filter>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="All" />
<appender-ref ref="ErrorLogFileAppender" />
<appender-ref ref="DeBugLogFileAppender" />
</root>
</log4net>
</configuration>
3.添加日志幫助類
using log4net.Config;
using log4net;
namespace CodeIdentify
{
public class LoggerHelper
{
private ILog logger;
public LoggerHelper()
{
if (logger == null)
{
var repository = LogManager.CreateRepository("NETCoreRepository");
//log4net從log4net.config文件中讀取配置信息
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
logger = LogManager.GetLogger(repository.Name, "Logger");
}
}
/// <summary>
/// Debug日志
/// </summary>
/// <param name="data">調(diào)試數(shù)據(jù)</param>
public void Debug(object data)
{
logger.Debug(data);
}
/// <summary>
/// 普通日志
/// </summary>
/// <param name="controller">控制器</param>
/// <param name="exception">catch異常信息</param>
public void Info(string controller, Exception exception = null)
{
if (exception == null)
logger.Info(controller);
else
logger.Info(controller, exception);
}
/// <summary>
/// 告警日志
/// </summary>
/// <param name="controller"></param>
/// <param name="exception"></param>
public void Warn(string controller, Exception exception = null)
{
if (exception == null)
logger.Warn(controller);
else
logger.Warn(controller, exception);
}
/// <summary>
/// 錯誤日志
/// </summary>
/// <param name="controller"></param>
/// <param name="exception"></param>
public void Error(string controller, Exception exception = null)
{
if (exception == null)
logger.Error(controller);
else
logger.Error(controller, exception);
}
}
}
4.在服務中采用單例生命周期注入
builder.Services.AddSingleton(typeof(LoggerHelper));
5.添加全局異常過濾器
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Net;
namespace CodeIdentify
{
public class GlobalExceptionFilter : IExceptionFilter
{
private readonly LoggerHelper _loggerHelper;
public GlobalExceptionFilter(LoggerHelper loggerHelper)
{
_loggerHelper= loggerHelper;
}
public void OnException(ExceptionContext context)
{
var exception = context.Exception;
_loggerHelper.Error(context.HttpContext.Request.Method, exception);
context.ExceptionHandled = true; // 標記已處理異常
}
}
}
6.注入過濾器服務
builder.Services.AddControllers(options =>
{
options.Filters.Add<GlobalExceptionFilter>();
});
7.使用文章來源:http://www.zghlxwxcb.cn/news/detail-671225.html
using CodeIdentify.Servers;
using Microsoft.AspNetCore.Mvc;
namespace CodeIdentify.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CodeIdentityController : ControllerBase
{
private readonly IBaiDuCodeIdentity _baiDuCodeIdentity;
public CodeIdentityController(IBaiDuCodeIdentity baiDuCodeIdentity)
{
_baiDuCodeIdentity = baiDuCodeIdentity;
}
[HttpPost]
public async Task<IActionResult> GetCode([FromBody] string url)
{
if(string.IsNullOrWhiteSpace(url)) throw new ArgumentNullException(nameof(url));
return Ok();
}
}
}
日志截圖:文章來源地址http://www.zghlxwxcb.cn/news/detail-671225.html
到了這里,關于.NetCore之log4net的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!