Имя файла переменной в FileAppender и RollingFileAppender в log4net - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь использовать log4net для входа в файл с именем переменной, используя log4net.Util.PatternString. Конфигурация приложения выглядит следующим образом:

<appender name="file2" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_PID%processid.log" /> 
    <appendToFile value="true" />       
    <layout type="log4net.Layout.PatternLayout">        
        <conversionPattern value="%date [%thread] %level - %message%newline" />
    </layout>
</appender>

При такой конфигурации файл успешно создается с именем примерно таким: MyLogFile_PID12345.log

Я успешно использовал% processid,% random {8},% env {SOME_ENV_VAR},% property {MYPROPERTY} и% appsetting {someKey}.

Но я хочу вставить дату, и независимо от того, что я пытаюсь сделать, мне кажется, что я не могу понять, что из этого: % date,% utcdate,% date {DATE},% utcdate {DATE},% date {ISO8601},% date {ABSOLUTE},% date {{ЧЧ: мм: сс} или в основном в любой форме даты.

Например, что не так в:

<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{ISO8601}.log" />

Я также пытался использовать отдельный узел для конфигурации шаблона преобразования, но безрезультатно:

<file type="log4net.Util.PatternString">
    <conversionPattern value="c:\temp\MyLogFile_%date{ISO8601}.log" />
</file>

Прямо сейчас я использую настраиваемое свойство (со свойством% {MY_CUSTOM_PROPERTY_WITH_THE_NAME_I_WANT}) для достижения аналогичного эффекта, но, помимо некоторого излишества, мне интересно, что я делаю неправильно. Я пробовал на разных компьютерах и в разных приложениях и не могу получить то, что намереваюсь.

Кстати, моя настоящая цель - использовать его в RollingFileAppender, но я спрашиваю (и пытаюсь) здесь о FileAppender просто для простоты.

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Я наконец получил это!

Кажется, единственный способ, которым это работает, - указание строки формата даты, и без NO ':' в ней .

Несмотря на примеры в https://logging.apache.org/log4net/release/sdk/index.html,, где используются% date {ЧЧ: мм: сс, ффф},% дата {дд МММ гггг ЧЧ: мм: сс, ффф},% дата {ISO8601},% date {ABSOLUTE} ни один из них, кажется, не работает!

Но это (и подобные), наконец, делают:

<file type="log4net.Util.PatternString" value="c:\temp\MyLogFile_%date{yyyy-MM-dd_HH-mm-ss}.log" />

Я все еще чешу голову, если я что-то делаю неправильно или документация просто сбивает с толку.

Я думаю, что это связано с тем фактом, что символ ':' разрешен в именах файлов Linux, но не в Windows (я использую Windows, как мне кажется, 90% пользователей log4net ). И ISO8601, и ABSOLUTE тоже не работают, вероятно, потому что в обоих случаях log4net переводит их в строку с символом ':', что приводит к сбою по тем же причинам.

Если это так, будучи регистратором для .NET, фреймворка, который в подавляющем большинстве случаев используется в системах Windows, я думаю, это то, что они должны иметь в виду.

Проблема решена (хотя и с некоторыми сомнениями).

0 голосов
/ 11 июля 2019

Я вижу, что вы используете тип log4net.Util.PatternString напрямую, а не appender log4net.Appender.FileAppender, какая-то конкретная причина для этого?

Я просто смотрю на примеры из https://logging.apache.org/log4net/release/config-examples.html

...