ASP.NET Core 配置全局异常日志记录
1.安装log4net
使用Install-Package Log4net命令进行安装
2.配置log4net使用的配置文件 (注:一定要创建在项目根目录下,不然读不到配置文件)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log/" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="50MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【异常时间】:%date %newline%message%newline--------------------------------------------------------------------%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
3.新建 LogHelper.cs
public class LogHelper { private static ILog logger; static Logger() { if (logger == null) { var repository = LogManager.CreateRepository("NETCoreRepository"); //log4net从log4net.config文件中读取配置信息 XmlConfigurator.Configure(repository, new FileInfo("log4net.config")); logger = LogManager.GetLogger(repository.Name, "InfoLogger"); } } /// <summary> /// 普通日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Info(string message, Exception exception = null) { if (exception == null) logger.Info(message); else logger.Info(message, exception); } /// <summary> /// 告警日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Warn(string message, Exception exception = null) { if (exception == null) logger.Warn(message); else logger.Warn(message, exception); } /// <summary> /// 错误日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Error(string message, Exception exception = null) { if (exception == null) logger.Error(message); else logger.Error(message, exception); } }
4.定义全局异常过滤器
4.1 新建Filte文件夹,添加GlobalExceptionFilter.cs
// <summary> /// 全局异常错误日志 /// </summary> public class GlobalExceptionsFilter : IExceptionFilter {
public void OnException(ExceptionContext context) { var json = new JsonErrorResponse(); json.Message = context.Exception.Message;//错误信息 context.Result = new InternalServerErrorObjectResult(json); //采用log4net 进行错误日志记录 LogHelper.Error(json.Message, WriteLog(json.Message, context.Exception)); } /// <summary> /// 自定义返回格式 /// </summary> /// <param name="throwMsg"></param> /// <param name="ex"></param> /// <returns></returns> public string WriteLog(string throwMsg, Exception ex) { return string.Format("【自定义错误】:{0} \r\n【异常类型】:{1} \r\n【异常信息】:{2} \r\n【堆栈调用】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); } } public class InternalServerErrorObjectResult : ObjectResult { public InternalServerErrorObjectResult(object value) : base(value) { StatusCode = StatusCodes.Status500InternalServerError; } } //返回错误信息 public class JsonErrorResponse { /// <summary> /// 生产环境的消息 /// </summary> public string Message { get; set; } /// <summary> /// 开发环境的消息 /// </summary> public string DevelopmentMessage { get; set; } }
4.2 在Startup.cs类中的ConfigureServices方法添加以下代码
services.AddMvc(x => { x.Filters.Add(typeof(GlobalExceptionFilter)); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);//注入全局异常捕获

浙公网安备 33010602011771号