Дополнительные кавычки при регистрации объектов с NLog - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть код, который выводит интерполированную строку в журнал с NLog.

Вот пример

_logger.LogDebug($"REQUEST {webRequest.RequestUri}", Id)
WebResponse webResponse = await _httpService.SendRequestAsync(webRequest);
var response = ParseResponse(webResponse);
_logger.LogDebug($"RESPONSE {(int)response.StatusCode} {JsonConvert.SerializeObject(response.Body)}", Id);

В этом примере, в первом случае вызова функции _logger.LogDebug , в результате я получаю ожидаемый результат:

2019-04-15 09:27:24.5027 DEBUG e1701b07-d228-4543-a320-3cb1b7f2e4b0 REQUEST http://url/

Но во втором случае ожидаемый результат заключен в дополнительные кавычки.

2019-04-15 09:27:57.2907 DEBUG "e1701b07-d228-4543-a320-3cb1b7f2e4b0 RESPONSE 200 [{...},{...}]"

Вот метод _logger.LogDebug

using NLog;

private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();

public void LogDebug(string message, Guid id)
{
    Logger.Debug($"{id.ToString()} {message}");
}

Результат JsonConvert.SerializeObject (response.Body) - это строковое представление массива json, например: [{"key":"value","key":"value"},{"key":"value","key":"value"}]

Вот часть моего Nlog.config

  <targets>

    <target name="csv" xsi:type="File" fileName="${shortdate}-${level}-services.log">
      <layout xsi:type="CSVLayout" delimiter="Tab" withHeader="false">
        <column name="time" layout="${longdate}" />
        <column name="level" layout="${uppercase:${level}}"/>
        <column name="message" layout="${message}" />
      </layout>
    </target>

  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="csv" />
  </rules>

Почему я получаю дополнительные кавычки во втором случае икак я могу избежать этого?

1 Ответ

1 голос
/ 15 апреля 2019

Согласно документам ,

CSV Параметры цитирования - режим цитирования по умолчанию для столбцов.

По умолчанию: Авто

Возможные значения:

Авто - только кавычки, значения которых содержат символ кавычки, разделитель или переводы строки (медленно)

Все - Цитировать весь столбец. Полезно для данных, которые известны как многострочные, например Exception-ToString

(быстро) Ничего - ничего не процитировать (очень быстро)

По умолчанию Auto - это означает, что он цитирует вашу строку, поскольку он содержит кавычку, символ табуляции (разделитель) или новую строку.

Важно, чтобы это было сделано, чтобы файл был действительным файлом CSV (в противном случае Excel и т. Д. Не будут знать, где начинаются и заканчиваются данные столбца.

...