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

StackOverflow https://stackoverflow.com/questions/579688

  •  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 использует два процессы для запуска тестов:

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

Обратите внимание на использование Шаблон для '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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top