Подтвердить что ты не робот

Почему дата приложена дважды при именах файлов при использовании Log4Net?

Я пытался добавить дату в мое имя файла журнала, и я смог заставить ее работать, выполнив несколько предложений, которые я нашел в stackoverflow. Все работает нормально, но по какой-то причине первый файл всегда имеет дату, добавленную дважды.

Например, вместо log.2009-02-23.log, я получаю log.2009-02-23.log.2009-02-23.log.

Я нашел это настолько странным и fyi, это очень простой код. Это не похоже на то, что он работает в многопоточной среде.

Моя конфигурация log4net:

<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

4b9b3361

Ответ 1

Это проблема разрешения. По крайней мере, то, что происходит со мной.

Я новичок в использовании Log4Net, поэтому я не знал, что у него есть внутреннее ведение журнала, но я нашел его, поэтому я попытался превратить внутреннее ведение журнала on. Я был не очень уверен, что это говорит, но вот, как мне это выглядит: 1. Добавьте дату к имени файла. 2. Попробуйте получить доступ к файлу для записи на него (не удалось). 3. Добавьте дату к имени файла еще раз. 4. Успешно получить доступ к файлу (который теперь имеет странное имя файла)

Прежде чем я это узнаю, я искал решение этой проблемы с такими ключевыми словами, как то, что у меня есть как заголовок в этом вопросе stackoverflow. Там было не так много информации. Я нашел, может быть, одного парня, который сказал, что это случается с некоторыми людьми, но никогда не объясняло почему и решение. С этой новой информацией (+ внутреннее сообщение об ошибке из Log4Net) я искал разные потоки из поисковых систем. С этим я нашел подсказки, что это может быть проблема разрешения.

Кажется, что приложение для записи не имеет достаточного разрешения для папки журналов. Идентификатор приложения по умолчанию обычно является NETWORK_SERVICE. После того, как я дам больше прав (я дал ему полный контроль, но я не знаю, что является минимальным, чтобы заставить его работать) в папку, все работает отлично.

Если кто-нибудь может объяснить это лучше меня, не стесняйтесь редактировать.

Ответ 2

Это происходит, если есть проблема с доступом к файлу журнала при инициализации системы журналов. Это может произойти, если вы дважды инициализируете систему журналов, если вы запускаете свою программу, когда выполняется другая копия, и записываете в файл журнала, или если вы редактируете файл журнала в текстовом редакторе. В основном все, что вызывает блокировку записи в файле журнала при запуске log4net init.

Проверьте код для повторных вызовов в log4net init - возможно, вы инициализируетесь в конструкторе, а не в статическом конструкторе singleton или глобальном init, например.

Это также может произойти, если вы работаете в конфигурации "веб-сад" и не включаете PID в имя файла, потому что каждый процесс веб-сервера пытается записать в тот же файл. Если вы используете веб-сады и записываете файлы, добавьте pid в шаблон имени файла, чтобы каждый серверный процесс получил свой собственный файл.

Ответ 3

Как отметил ол. ваша проблема связана с '\ g', которую ваш log4net интерпретирует как другой формат даты. Попробуйте удалить ".yyyy-MM-dd.lo\g" и заменить его "yyyy-MM-dd"

".log" не входит в формат даты

Ответ 4

Я использую следующее:

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>

С этим я получаю имена файлов: 2009.02.23.log

Ответ 5

Я сталкиваюсь с той же проблемой. Для меня это была комбинация использования RollingFileAppender для моих тестовых журналов и запуск моих тестов NUnit с помощью ReSharper.

Оказывается, ReSharper использует два процесса для запуска тестов:

2 TaskRunners

который создает условие гонки в файле журнала.

Теперь, если мы изменим имя файла журнала, чтобы включить идентификатор процесса:

<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

Обратите внимание на использование PatternString для 'type'.

Надеюсь, что это поможет.

Ответ 6

try <datePattern value=".yyyy-MM-dd.lo\g" /> Я не понимаю, что означает\g.