Экранирующее двоеточие конфигурации Nlog

У меня есть файл NLog.config со следующей переменной

<variables>
    <variable name = "LogsFilePath" value = "${appsetting:item=LogsFolderPath:default=C:\Company\Logs}" >
</variables>
<targets>
    
    <target name = "File"
        xsi:type = "File"
        fileName = "${LogsFilePath}\${event-properties:FileName}.log" />
    
</targets>

<rules>
    <rule logger = "DynamicLogger_*" minLevel = "Trace" writeTo = "File" />
</rules>

Когда в файле app.config нет значения, принимается значение по умолчанию только C (из-за двоеточия).

Моя цель примерно такая

Также, если я использую переменную в файле конфигурации, например ${var:LogsFilePath}, у меня возникают проблемы из-за двоеточия. Я должен использовать его со статической формой ${LogsFilePath}

Как я могу решить эту проблему и использовать путь в качестве значения по умолчанию в пути по умолчанию переменной appsetting?

Это работает, когда я добавляю экраны: value = "${appsetting:item=LogsFolderPath:default=C\:\\Company‌​\\Logs}". В качестве альтернативы можно использовать whenEmpty. value = "${appsetting:item=LogsFolderPath:whenEmpty=C\:\\Compa‌​ny\\Logs}". (Конечно, резервный вариант требует, чтобы у вас было действительное разрешение на запись файлов на диск C)

Rolf Kristensen 10.01.2023 20:53

Возможно также добавить запасной вариант для имени файла, например: fileName = "${LogsFilePath}\${event-properties:FileName:whenEm‌​pty=App}.log". Рассмотрите возможность использования NLog GDC вместо NLog LogEvent-Properties для имени файла. Смотрите также github.com/NLog/NLog/wiki/Context

Rolf Kristensen 10.01.2023 20:57

@RolfKristensen Я использую свойства, потому что хочу использовать одну и ту же цель для разных регистраторов, созданных динамически, и я хочу иметь возможность указать имя файла. В моем коде я создаю регистраторы с именем "DynamicLogger_*" и устанавливаю для них свойство имени файла. Я отредактировал вопрос с частью правил. Я не уверен, подходит ли GDC для этого, потому что он динамический.

JuanDYB 10.01.2023 21:23

Если вы сделаете это NLog.LogManager.GetLogger("DynamicLogger.MyFileName") с этим <rule logger = "DynamicLogger.*" minLevel = "Trace" writeTo = "File" />, то вы можете указать FileName следующим образом: fileName = "${LogsFilePath}\${logger:shortName=true}.log" См. также: github.com/NLog/NLog/wiki/Logger-Layout-Renderer (Устранение необходимости включать FileName в свойствах LogEvent)

Rolf Kristensen 10.01.2023 22:53
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
1
4
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно убежать от него. Замените «:» на «\:», также вам нужно экранировать обратную косую черту.

У меня так работает

<variables>
    <variable name = "LogsFolderPath" value = "${appsetting:item=LogsFolderPath:default=C\:\\Company\\Logs}" />
</variables>

В StackOverflow вам тоже нужно избегать их, исправлено. Также двойные точки называют двоеточием

Kliment Nechaev 10.01.2023 14:28

Поэтому я должен поставить C\:\Company\Logs. правильный?

JuanDYB 10.01.2023 14:28

Да это правильно

Kliment Nechaev 10.01.2023 14:29

Я думаю, что это не работает, потому что он пытается сохранить журналы в C:\log.log, поэтому он не использует полный путь

JuanDYB 10.01.2023 14:34

О, похоже, вам тоже нужно экранировать обратную косую черту

Kliment Nechaev 10.01.2023 14:37

Я пробовал с C\\:\\Company\\Logs, а также с C\:\\Company\\Logs Никто не работает У меня есть исключение для разрешений, потому что он не может писать на C

JuanDYB 10.01.2023 14:49

Попробуйте использовать ${appsetting:item=LogsFolderPath:default=${literal:text=C\:\‌​\Company\\Logs}}"

Kliment Nechaev 10.01.2023 15:05

Другие вопросы по теме