Я использую lib из 'Microsoft.Extensions.Logging' .netcore 2.2
Мой код - когда вы сохраняете журнал в промежуточном ПО, как это.
public async Task Invoke(HttpContext httpContext)
{
... logic to ReadRequestBody and ReadResponseBody
var requestBodyContent = await ReadRequestBody(request);
var originalBodyStream = httpContext.Response.Body;
await _next(httpContext);
await ReadResponseBody(httpContext.Response);
...logic
_loggerFactory.AddFile($"Logs/All-{DateTime.Today.ToString("dd_MMMM_yyyy")}.txt");
}
private async Task<string> ReadRequestBody(HttpRequest request)
{
request.EnableRewind();
var buffer = new byte[Convert.ToInt32(request.ContentLength)];
await request.Body.ReadAsync(buffer, 0, buffer.Length);
var bodyAsText = Encoding.UTF8.GetString(buffer);
request.Body.Seek(0, SeekOrigin.Begin);
_logger.LogInformation($"\n\n\n Request Body : {request.Host} { request.Method} { request.Path} \n\n\n {bodyAsText} \n\n\n End Body : \n\n\n");
return bodyAsText;
}
private async Task ReadResponseBody(HttpResponse response)
{
if (response.Body.CanRead)
{
response.Body.Seek(0, SeekOrigin.Begin);
var bodyAsText = await new StreamReader(response.Body).ReadToEndAsync();
response.Body.Seek(0, SeekOrigin.Begin);
_logger.LogInformation($"\n\n\n Response Body : \n\n\n {bodyAsText} \n\n\n End Body : \n\n\n");
}
}
Я пытаюсь отладить, чтобы увидеть значение, и использую Console.write (), чтобы проверить, сохранено ли мое тело в лог-файл. Это не проблема, сообщение завершено на всем объекте. Но когда я использую ILogger и ILoggerFactory, журнал сохранения не завершен. Это сохранить в текстовом файле только половину объекта. Как я могу это исправить?