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);//注入全局异常捕获

 

 

参考资料:https://www.cnblogs.com/laozhang-is-phi/p/9855836.html

https://www.cnblogs.com/diwu0510/p/10873142.html

posted @ 2020-08-04 16:02  优秀的代码搬运工zz  阅读(481)  评论(0编辑  收藏  举报