Почему дата добавляется дважды на имена файлов при использовании log4net?
-
06-09-2019 - |
Вопрос
Я пытался добавить дату к названию файла моего журнала, и я смог заставить его работать, следуя нескольким предложениям, которые я нашел в Stackoverflow. Все работает нормально, но по какой -то причине первый файл всегда имеет дату, добавленную дважды.
Например, вместо log.2009-02-23.log, Я получил log.2009-02-23.log.2009-02-23.log.
Я нашел это таким странным и к вашему сведению, это очень простой код. Это не так, как я работаю в многопоточной среде.
My Log4net Config:
<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
<file value="../../Logs/Mylog"/>
<staticLogFileName value="false" />
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value=".yyyy-MM-dd.lo\g" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="MyLog"/>
</root>
</log4net>
Есть идеи почему?
РЕДАКТИРОВАТЬ: Я хочу добавить информацию о среде, в которой я тестирую это.
- asp.net
- .net Framework 2.0
- Windows Server 2003 64-битный сервисный пакет 2
- log4net 1.2.10
Решение 2
Это проблема разрешения. По крайней мере, это то, что со мной происходит.
Я новичок в использовании log4net, поэтому я не знал, что в нем есть внутренняя регистрация, но я нашел его, поэтому я попытался перевернуть Внутренняя регистрация на. Я не был очень уверен, что это говорит, но вот как мне это кажется: 1. Добавьте дату к имени файла. 2. Попробуйте получить доступ к файлу, чтобы написать к нему (сбой). 3. Добавьте дату к имени файла опять такиАнкет 4. Успешный доступ к файлу (у которого сейчас есть странное имя файла)
Прежде чем я знаю это, я был Google для решения этой проблемы с ключевыми словами, такими как то, что я имею в качестве заголовка по этому вопросу Stackoverflow. Там не было так много информации. Я нашел, может быть, один парень, который сказал, что это случается с некоторыми людьми, но никогда не объяснял, почему или решение. С помощью этой новой информации (+внутреннее сообщение об ошибке из log4net) я просматривал разные потоки из поисковых систем. При этом я нашел намеки на то, что это может быть проблемой разрешения.
Кажется, что приложение для написания не имеет достаточного разрешения на папку журналов. По умолчанию идентификация приложения обычно является network_service. После того, как я даю больше разрешения (я дал ему полный контроль, но я не знаю, каков минимум, чтобы заставить его работать) в папку, все работает просто отлично.
Если кто -то может объяснить это лучше меня, пожалуйста, не стесняйтесь редактировать.
Другие советы
Это происходит, если есть проблема с доступом к файлу журнала при инициализации системы журнала. Это может произойти, если вы инициализируете систему журнала дважды, если вы запустите свою программу, в то время как другая копия работает и записывает в файл журнала, или если вы редактируете файл журнала в текстовом редакторе. В основном все, что вызывает блокировку записи в файле журнала при запуске Log4net Init.
Проверьте свой код для дублирующих вызовов в Log4net init - возможно, вы инициализации в конструкторе вместо статического конструктора Синглтона или Global Init, например.
Это также может произойти, если вы работаете в конфигурации «веб -сада» и не включаете PID в имя файла, потому что каждый другой процесс веб -сервера пытается написать в один и тот же файл. При использовании веб -садов и записи в файлы добавьте PID в шаблон имени файла, чтобы каждый серверный процесс получил свой собственный файл.
Я сталкиваюсь с той же проблемой. Для меня это была комбинация использования RollingFileAppender для моих журналов тестирования и запуска моих NUNIT -тестов с Resharper.
Оказывается, что Resharper использует два процессы для запуска тестов:
который создает условие гонки в файле журнала.
Теперь, если мы изменим имя файла журнала, чтобы включить идентификатор процесса:
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="MyLog.pid.%processid" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="false"/>
<datePattern value="_yyyy-MM-dd'.log'"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" />
</layout>
</appender>
проблема решена. Каждый файл получает свое собственное, уникальное имя:
Mylog.pid.5440_2010-10-13.log
Mylog.pid.1496_2010-10-13.log
Обратите внимание на использование Шаблон для 'type'.
Надеюсь, это поможет.
Как указал Олле. Ваша проблема связана с « G», которую ваш log4net интерпретирует как еще один формат Date. Попробуйте удалить ".yyyy-mm-dd.lo g" и заменить его "yyyy-mm-dd"
«.Log» не принадлежит DateFormat
Я использую следующее:
<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>
С этим я получаю имена файлов, как: 2009.02.23.log
пытаться <datePattern value=".yyyy-MM-dd.lo\g" />
Я не понимаю, для чего для g.