每个ILogForWebAPIs实现都将包含ILogForWebAPIs的嵌套实例
按照我的经验,凡是在API中记录请求和响应。这样做可以辅佐开发人员调试问题并供给有价值的性能指标。在本教程中,我将介绍如何为ASP.NET Core 3 Web API创建根基的日志记录解决方案。在这篇文章的结尾,我们将有一个有效的日志记录解决方案,它将记录每个请求以及对控制台和文件系统的响应,并且日志将包孕API措置惩罚惩罚每个请求所花费的时间。以下是概述:
1. 先决条件
2. 创建RequestLog和ResponseLog模型
3. 创建ILogForWebAPI
4. 创建WebAPIConsoleLogger
5. 创建WebAPIFileLogger
6. 创建CustomLoggingMiddleware
7. 在启动中添加自界说日志记录,然后进行测试
先决条件
您应该熟悉 ASP.NET Core Web API请求管道。
首先,创建一个ASP.NET Core 3 Web API项目。
创建RequestLog和ResponseLog模型
这些类将携带我们要记录的请求和响应数据。
1 public class RequestLog 2 { 3 public Guid Id { get; set; } 4 public string Action { get; set; } 5 public string URL { get; set; } 6 public string IPAddress { get; set; } 7 public DateTime TimeStampUtc { get; set; } 8 }
1 public class ResponseLog 2 { 3 public Guid Id { get; set; } 4 public string Action { get; set; } 5 public string URL { get; set; } 6 public int StatusCode { get; set; } 7 public long ResponseTimeInMilliseconds { get; set; } 8 public DateTime TimeStampUtc { get; set; } 9 }
创建ILogForWebAPI
在这里,我们创建了可以执行两个操纵的日志记录抽象—日志记录请求和日志记录响应。
1 public interface ILogForWebAPIs 2 { 3 Task LogAsync(RequestLog requestLog); 4 Task LogAsync(ResponseLog responseLog); 5 }
创建WebAPIConsoleLogger
遵循单一职责原则(SRP),我们将创建ILogForWebAPI的两个实现。WebAPIConsoleLogger将卖力登录到控制台,而WebAPIFileLogger将卖力登录到文件系统。我们可以使用Decorator Pattern在单个ILogForWebAPI实例中供给两个记录器的成果。每个ILogForWebAPIs实现都将包罗ILogForWebAPIs的嵌套实例,如果该实例不为null,则将其挪用。
1 public class WebAPIConsoleLogger : ILogForWebAPIs 2 { 3 private readonly ILogForWebAPIs _nextLogger; 4 private readonly string _dateTimeFormat = "hh:mm:ss tt"; 5 6 public WebAPIConsoleLogger(ILogForWebAPIs nextLogger = null) 7 { 8 _nextLogger = nextLogger; 9 } 10 11 public async Task LogAsync(RequestLog requestLog) 12 { 13 Console.WriteLine($"Request received from {requestLog.IPAddress} @ {requestLog.TimeStampUtc.ToString(_dateTimeFormat)} (Utc)"); 14 Console.WriteLine($"{requestLog.Action} {requestLog.URL}"); 15 Console.WriteLine(); 16 17 if (_nextLogger != null) 18 { 19 await _nextLogger.LogAsync(requestLog); 20 } 21 } 22 23 public async Task LogAsync(ResponseLog responseLog) 24 { 25 Console.WriteLine($"Response sent @ {responseLog.TimeStampUtc.ToString(_dateTimeFormat)} (Utc)"); 26 Console.WriteLine($"{responseLog.StatusCode}: {responseLog.Action} {responseLog.URL}"); 27 Console.WriteLine($"Response time: {responseLog.ResponseTimeInMilliseconds} ms"); 28 Console.WriteLine(); 29 30 if (_nextLogger != null) 31 { 32 await _nextLogger.LogAsync(responseLog); 33 } 34 } 35 }
创建WebAPIFileLogger
WebAPIFileLogger将序列化模型并将其ID用作文件名,从而为每个请求和响应创建一个json文件。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/29899.html