我需要在asp.net core 2.0 Web應用程序中記錄請求/響應。為此,我們創建了一個RequestLoggingMiddleware(請參見下文)。該解決方案的缺點在于,將在每個請求中讀取主體流。有沒有一種方法可以評估是否有針對特定日志級別配置的logprovider。例如,在沒有logprovider正在偵聽DebugLog-Level的情況下,我們不需要讀取主體流。public class RequestLoggingMiddleware{ public ILogger<RequestLoggingMiddleware> Logger { get; } public RequestDelegate NextMiddleware { get; } public RequestLoggingMiddleware(RequestDelegate nextMiddleware, ILogger<RequestLoggingMiddleware> logger) { NextMiddleware = nextMiddleware; Logger = logger; } public async Task Invoke(HttpContext context) { using (MemoryStream loggableResponseStream = new MemoryStream()) { Logger.LogDebug(await FormatRequest(context.Request)); await NextMiddleware(context); } } private static async Task<string> FormatRequest(HttpRequest request) { Stream body = request.Body; request.EnableRewind(); byte[] buffer = new byte[Convert.ToInt32(request.ContentLength)]; await request.Body.ReadAsync(buffer, 0, buffer.Length); string bodyAsText = Encoding.UTF8.GetString(buffer); request.Body = body; var messageObjToLog = new { scheme = request.Scheme, host = request.Host, path = request.Path, queryString = request.Query, requestBody = bodyAsText }; return JsonConvert.SerializeObject(messageObjToLog); }}
1 回答

月關寶盒
TA貢獻1772條經驗 獲得超5個贊
ILogger接口的IsEnabled方法定義為:
bool IsEnabled(LogLevel logLevel);
有沒有一種方法可以評估是否有針對特定日志級別配置的logprovider。
的默認實現會ILogger保留已配置記錄器的集合。IsEnabled方法的實現與您所描述的完全相同:true如果至少一個記錄器啟用了指定的日志級別,則會枚舉所有記錄器,并返回所有記錄器。
github上的Logger源代碼
因此,以下檢查將為您完成這項工作:
if (logger.IsEnabled(LogLevel.Debug))
{
// ...
}
- 1 回答
- 0 關注
- 186 瀏覽
添加回答
舉報
0/150
提交
取消