C # loging .netcore сохранить журнал только половина объекта - PullRequest
0 голосов
/ 21 октября 2019

enter image description here

Я использую 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, журнал сохранения не завершен. Это сохранить в текстовом файле только половину объекта. Как я могу это исправить?

...