2021年1月14日星期四

asp.net core使用 log4net全局日志处理

一、引用类库:

  1、 Microsoft.Extensions.Logging.Log4Net.AspNetCore

  2、log4net.AspNetCore

二、配置 log4net.config 文件

<??><log4net> <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >  <layout type="log4net.Layout.PatternLayout">   <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />  </layout> </appender> <!--指定日记记录方式,以滚动文件的方式(文件记录)--> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">  <!--日志路径-->  <file value="log\log.txt" />  <!--是否是向文件中追加日志-->  <appendToFile value="true" />  <!--log保留天数-->  <param name= "MaxSizeRollBackups" value= "10"/>  <!--每个文件最大3M-->  <param name="maximumFileSize" value="3MB" />  <!--日志根据日期滚动-->  <param name="RollingStyle" value="Date" />  <!--日志文件名格式为:logs_20080831.log-->  <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />  <!--日志文件名是否是固定不变的-->  <param name="StaticLogFileName" value="false" />  <!--布局-->  <layout type="log4net.Layout.PatternLayout">   <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />  </layout> </appender> <root>  <level value="ALL"/>  <appender-ref ref="DebugAppender" />  <appender-ref ref="RollingFile" /> </root></log4net>

三、创建自己的 MyExceptionFilterAttribute并继承 ExceptionFilterAttribute 该抽象类,依赖注入日志对象 logger

public class MyExceptionFilterAttribute : ExceptionFilterAttribute {  private readonly ILogger<MyExceptionFilterAttribute> _logger;    /// <summary>  /// 通过构造函数的方式,依赖注入日志对象  /// </summary>  /// <param name="logger"></param>  public MyExceptionFilterAttribute(ILogger<MyExceptionFilterAttribute> logger)  {   this._logger = logger;  }  public override void OnException(ExceptionContext context)  {   // 判断是否被处理过   if (!context.ExceptionHandled)   {    context.ExceptionHandled = true;    var str = $"异常:{context.HttpContext.Request.Path}{context.Exception.Message}";    // 输出到控制台    Console.WriteLine(str);    // 写入文本日志(或者是记录到数据库等....)    _logger.LogWarning(str);    if (context.HttpContext.Request.Method == "GET")    {     // 如果是 get请求,则跳转页面    }    else    {     // 如果是post 则都是ajax请求,则返回json数据格式,输出自定义或者约定好的格式     context.Result = new JsonResult(new { Result = false, Message = "请求出现错误,请联系管理员" });    }   }  } }

四、在Program.cs配置使用log4net

public class Program {  public static void Main(string[] args)  {   CreateHostBuilder(args).Build().Run();  }  public static IHostBuilder CreateHostBuilder(string[] args) =>   Host.CreateDefaultBuilder(args)   .ConfigureLogging((context, loggingBuilder) =>   {    loggingBuilder.AddFilter("System", LogLevel.Warning);    loggingBuilder.AddFilter("Microsoft", LogLevel.Warning);    // 使用log4net    loggingBuilder.AddLog4Net();   })    .ConfigureWebHostDefaults(webBuilder =>    {     webBuilder.UseStartup<Startup>();    }); }

五、在Startup.cs ConfigureServices方面里面里面注册全局错误日志处理

// This method gets called by the runtime. Use this method to add services to the container.  public void ConfigureServices(IServiceCollection services)  {   services.AddControllersWithViews(options=>    {    // 全局注册,全局生效    options.Filters.Add(typeof(MyExceptionFilterAttribute));   });  }

这样系统都可以统一处理异常。避免代码中到处都是try catch,开发人员多,写出来的日志格式等不统一,错误日志漏处理等现象。









原文转载:http://www.shaoqun.com/a/508749.html

跨境电商:https://www.ikjzd.com/

淘粉吧怎么返利:https://www.ikjzd.com/w/1725

promoted:https://www.ikjzd.com/w/971


一、引用类库:  1、Microsoft.Extensions.Logging.Log4Net.AspNetCore  2、log4net.AspNetCore二、配置log4net.config文件<??><log4net><appendername="DebugAppender"type="log4net.Appender.Debug
贝恩:贝恩
r标:r标
唐山的美丽雾凇 看雾凇不用再跑到东北了:唐山的美丽雾凇 看雾凇不用再跑到东北了
2020夏季适合去哪里游玩 国内十大避暑胜地(图):2020夏季适合去哪里游玩 国内十大避暑胜地(图)
中美贸易战将落下帷幕?美中两国已达成贸易协议执行机制:中美贸易战将落下帷幕?美中两国已达成贸易协议执行机制

没有评论:

发表评论