ASP.NET Core使用自定义日志中间件

2022-04-18 18:40:55

这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息。

1.首先创建一个Web应用项目,我选择的是MVC模板:

ml 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 LogMiddlewahttp://www.easck.comre(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使用自定义日志中间件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。