Log4net 的 ASP.NET Core 扩展库
2020-12-06 20:43
1951 查看
给大家安利一款
log4net的 ASP.NET Core 扩展库,它是基于
log4net开发的。 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现服务的注册和消费。直接在程序启动时注册到服务中即可完成全部配置,对于小白用户也可快速上手 log4net 日志组件。
Lightweight Logging Extension implementation of log4net.
Install Package
https://www.nuget.org/packages/Log4net.Extension.AspNetCore
Configure
- Add the
AddLog4Net()
call into yourConfigure
method of theStartup
class.
using Microsoft.Extensions.Logging; public class Startup { //... public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { //... loggerFactory.AddLog4Net(); //... } }
- Add a
log4net.config
file with the content:
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- This section contains the log4net configuration settings --> <log4net> <appender name="DebugAppender" type="log4net.Appender.ConsoleAppender,log4net"> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="Logs/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value=""Logs_"yyyyMMdd"_All.txt"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="Logs/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> </appender> <root> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> <appender-ref ref="InfoAppender" /> </root> <logger name="WebLogger"> <appender-ref ref="ErrorAppender" /> </logger> </log4net> </configuration>
- Add a global ExceptionFilter:
public void ConfigureServices(IServiceCollection services) { //... services.AddControllers(options => { options.Filters.Add<ExceptionFilter>(); }); //... }
appsettings.json
{ "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
appsettings.Development.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } }
- Add the log directory as static, so we can view the logs online.
using Microsoft.Extensions.Logging; public class Startup { //... public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { //... loggerFactory.AddLog4Net(); //... app.UseFileServer(new FileServerOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Logs")), RequestPath = new PathString("/Log"), EnableDirectoryBrowsing = true }); //... } }
Global Exception Filter
public class ExceptionFilter : IExceptionFilter { private readonly ILogger<ExceptionFilter> _logger; public ExceptionFilter(ILogger<ExceptionFilter> logger) { _logger = logger; } public void OnException(ExceptionContext filterContext) { var log = new StringBuilder(); //log the url if (filterContext.HttpContext.Request.GetDisplayUrl() != null) log.AppendLine(filterContext.HttpContext.Request.GetDisplayUrl()); log.AppendLine($"\tIP: {filterContext.HttpContext.Connection.RemoteIpAddress}"); foreach (var key in filterContext.HttpContext.Request.Headers.Keys) { log.AppendLine($"\t{key}: {filterContext.HttpContext.Request.Headers[key]}"); } var exception = filterContext.Exception; log.AppendLine("\tError Message:" + exception.Message); if (exception.InnerException != null) { PrintInnerException(exception.InnerException, log); } log.AppendLine("\tError HelpLink:" + exception.HelpLink); log.AppendLine("\tError StackTrace:" + exception.StackTrace); _logger.LogError(log.ToString()); } private void PrintInnerException(Exception ex, StringBuilder log) { log.AppendLine("\tError InnerMessage:" + ex.Message); if (ex.InnerException != null) { PrintInnerException(ex.InnerException, log); } } }
相关文章推荐
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作客户端浏览器软件
- asp.net core 2.0 Microsoft.Extensions.Logging 文本文件日志扩展
- ASP.NET Core使用log4net记录日志
- 使用Asp.Net Core MVC 开发项目实践[第三篇:基于EF Core的扩展]
- 使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
- ASP.NET Core 十种方式扩展你的 Views
- asp.net core 对HttpContext 的扩展
- ASP.NET Core 十种方式扩展你的 Views
- asp.net core添加全局异常处理及log4net、Nlog应用
- asp.net core tags 扩展之 id 和 name
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
- [转]ASP.NET Core 十种方式扩展你的 Views
- ASP.NET CORE[练习5]-Identity-扩展、注入服务、Migration(启示篇)
- [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作客户端浏览器软件
- asp.net core配置log4net
- ASP.NET Core 十种方式扩展你的 Views
- ASP.NET Core 十种方式扩展你的 Views
- 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core
- [转]ASP.NET Core 十种方式扩展你的 Views