前提:
需要nuget Microsoft.Extensions.Logging.Log4Net.AspNetCore 2.2.6;
Swashbuckle.AspNetCore 我暂时用的是 4.01;
描述:通过 Filters 拦截器获取 Api 请求内容及响应内容,并记录到日志文件;
有文中代码记录接口每次请求及响应情况如下图:
解决办法:
步骤1 配置 Swagger 接口文档
对startup.cs 进行修改代码如下:
ConfigureServices 中增加Swagger 配置
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Version = "v1", Title = "Filters 过滤器测试Api", Description = @"通过 IActionFilter, IAsyncResourceFilter 拦截器拦截请求及响应上下文并记录到log4日志" }); c.IncludeXmlComments(this.GetType().Assembly.Location.Replace(".dll", ".xml"), true); //是需要设置 XML 注释文件的完整路径 });
对 Configure Http管道增加 SwaggerUi
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); app.UseSwagger(); app.UseSwaggerUI(o => { o.SwaggerEndpoint("/swagger/v1/swagger.json", "Filters 过滤器测试Api"); }); }
步骤2 创建Log4net 日志帮助类 LogHelper.cs
/// <summary> /// 日志帮助类 /// </summary> public static class LogHelper { /// <summary> /// 日志提供者 /// </summary> private static ILogger logger; /// <summary> /// 静太方法构造函数 /// </summary> static LogHelper() { logger = new LoggerFactory().AddConsole().AddDebug().AddLog4Net().CreateLogger("Logs"); } /// <summary> /// 打印提示 /// </summary> /// <param name="message">日志内容</param> public static void Info(object message) { logger.LogInformation(message?.ToString()); } /// <summary> /// 打印错误 /// </summary> /// <param name="message">日志内容</param> public static void Error(object message) { logger.LogError(message?.ToString()); } /// <summary> /// 打印错误 /// </summary> /// <param name="ex">异常信息</param> /// <param name="message">日志内容</param> public static void Error(Exception ex, string message) { logger.LogError(ex, message); } /// <summary> /// 调试信息打印 /// </summary> /// <param name="message"></param> public static void Debug(object message) { logger.LogDebug(message?.ToString()); } }