Синтаксис усечения NLog

Я меняю файл NLog.config для UiPath. Я хочу увеличить значение усечения до 20000, и я пробовал следующий синтаксис, но он не работает.

<variable name="truncated_message" value="${replace:replaceWith=...TRUNCATED:regex=true:inner=${message}:searchFor=^[\s\S]{20000}}"/>
<target type="File" name="WorkflowLogFiles" fileName="${WorkflowLoggingDirectory}/${shortdate}_Execution.log" layout="${time} ${level} ${truncated_message}" keepFileOpen="true" openFileCacheTimeout="5" concurrentWrites="true" encoding="utf-8" writeBom="true" />

Я также пробовал следовать регулярным выражениям, но они у меня не работают

(^(?:\S+\s+\n?){0, 20000}) 
(?\=.\{20000\}).+

Может ли кто-нибудь сказать мне, что я делаю неправильно и как установить значение усечения на 20000?


person Maryam    schedule 05.10.2020    source источник
comment
Дубликат этого вопроса: stackoverflow.com/a/55941565/193178? Вы можете использовать ${message:truncate=20000}   -  person Rolf Kristensen    schedule 05.10.2020
comment
Отвечает ли это на ваш вопрос? Автоматическое усечение сообщений NLog   -  person Julian    schedule 06.10.2020
comment
@RolfKristensen Да, я пробовал это как ‹target type=File name=WorkflowLogFiles fileName=${WorkflowLoggingDirectory}/${shortdate}_Execution.log layout=${time} ${level} ${message:truncate=20000} keepFileOpen =true openFileCacheTimeout=5 concurrentWrites=true encoding=utf-8 writeBom=true /> Это тоже не работает.   -  person Maryam    schedule 06.10.2020
comment
@ Джулиан Я тоже это пробовал, но не знаю, почему у меня это не работает. Не могли бы вы также сказать мне, как я могу проверить версию Nlog?   -  person Maryam    schedule 06.10.2020
comment
@Maryam Если вы не знаете, как обновить nuget-пакет NLog, вы всегда можете попробовать устаревший подход: ${trim-whitespace:inner=${message:padding=-20000:fixedLength=true}}   -  person Rolf Kristensen    schedule 06.10.2020
comment
@RolfKristensen Я только что попробовал это, и он все еще записывает 10000 символов.   -  person Maryam    schedule 06.10.2020
comment
@Maryam Сколько символов тебе нужно? Прямо сейчас примеры, которые я вам дал, будут усечены до 20 000 символов (как указано в вашем вопросе). Вы, конечно, можете изменить номер по своему усмотрению. Вы случайно не пишете в Database-Target?   -  person Rolf Kristensen    schedule 06.10.2020
comment
Мне нужно 20 000 символов. Нет, я не пишу в базу данных-цель.   -  person Maryam    schedule 06.10.2020
comment
@Maryam Думаю, у вас проблема с ключом копирования-вставки. NLog усекает без проблем как старый, так и новый стиль.   -  person Rolf Kristensen    schedule 06.10.2020


Ответы (1)


Это работает для меня:

<nlog>
   <variable name="truncated_message_new" value="${message:truncate=20000}" />
   <variable name="truncated_message_old" value="${trim-whitespace:inner=${message:padding=-20000:fixedLength=true}}" />

   <targets>
      <target type="File" name="WorkflowLogFiles" fileName="C:\temp\nlog/${shortdate}_Execution.log" layout="${time} ${level} ${truncated_message_old}" keepFileOpen="true" openFileCacheTimeout="5" concurrentWrites="true" encoding="utf-8" writeBom="true" />
   </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="WorkflowLogFiles" />
  </rules>
</nlog>

Он сохраняет только 20000 символов:

var test = string.Empty.PadLeft(40000, '*');
NLog.LogManager.GetLogger("test").Info("Doing hard work! {Action}", test);
person Rolf Kristensen    schedule 06.10.2020
comment
Пробовал за 5000, работает. Кроме того, я только что узнал, что UiPath не позволяет использовать более 10 000 символов, поэтому он не работал с ограничением в 20 000. Большое спасибо за помощь, я очень ценю это :) Я отмечаю это как решение - person Maryam; 07.10.2020
comment
Просто подумайте, какой максимальный предел усечения мы можем установить в Nlog? - person Maryam; 07.10.2020
comment
Я думаю, что это 1 или 2 гигабайта. Но вы можете сначала достичь других забавных ограничений. - person Rolf Kristensen; 07.10.2020