自定义ASP.NET Core日志中间件
2019-04-21 11:24
585 查看
这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息。
1.首先创建一个Web应用项目,我选择的是MVC模板:
2.使用NuGet添加Microsoft.Extensions.Logging和NLog.Extensions.Logging
3.修改Configure方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddNLog(); //添加NLog NLog.LogManager.LoadConfiguration("nlog.config"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
4.添加nlog.config配置文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Warn" internalLogFile="internal-nlog.txt"> <!--define various log targets--> <targets> <!--write logs to file--> <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="Null" name="blackhole" /> </targets> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> </rules> </nlog>
注意:运行项目时需要复制nlog.config到debug
5.接下来开始自定义中间件
添加一个LogMiddleware类:
public class LogMiddleware { private readonly RequestDelegate _next; private readonly ILogger<LogMiddleware> _logger; public LogMiddleware(RequestDelegate next, ILogger<LogMiddleware> logger) { _next = next; _logger = logger; } public async Task Invoke(HttpContext context) { _logger.LogInformation("Request Url:" + context.Request.Path +Environment.NewLine + "Body:" + context.Request.Body.ToString()); await _next.Invoke(context); _logger.LogInformation("Response Url:" + context.Request.Path + Environment.NewLine + "Body:" + context.Response.Body.ToString()); } }
再创建一个LogMiddlewareExtensions类:
/// <summary> /// 这是扩展中间件 /// </summary> public static class LogMiddlewareExtensions { public static IApplicationBuilder UseLog(this IApplicationBuilder builder) { return builder.UseMiddleware<LogMiddleware>(); } }
这样就编写好一个自定义的中间件。
6.在Configure方法中调用app.UseLog()
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddNLog(); //添加NLog NLog.LogManager.LoadConfiguration("nlog.config"); app.UseLog(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
运行代码,会在debug文件下生成日志文件。
相关文章推荐
- Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- asp.net core 自定义中间件和service
- [Asp.net core]自定义中间件
- asp.net core 系列之中间件进阶篇-编写自定义中间件(middleware)
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 2.0 WebApi全局配置及日志
- 将参数传递给ASP.NET Core 2.0中的中间件
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
- Asp.Net.Core 系列-中间件和依赖注入进阶篇
- [译]ASP.NET Core 2.0 带初始参数的中间件
- ASP.NET Core 中使用 GrayLog 记录日志
- ASP.NET Core 开发-中间件(StaticFiles)使用
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制
- ASP.NET Core应用错误处理之StatusCodePagesMiddleware中间件针对响应码呈现错误页面
- Asp.Net Core 2.0 之旅---NLog日志的使用教程
- 详解在ASP.NET Core 中使用Cookie中间件