log4net EventLog пользовательский логин создан, но не используется - PullRequest
1 голос
/ 06 марта 2012

В проекте я использую log4net для записи в журнал событий.Мне нужно создать собственный журнал, так что все пойдет туда.Я попытался добавить событие в разные журналы, и это сработало, но по некоторым причинам теперь невозможно изменить имя журнала из файла конфигурации.Даже если я изменю его, он сохранит предыдущий и войдет в него.Вот пример моего app.config:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MMMM-dd HH:mm:ss, fff} [%thread] %level %message %exception%newline"/>
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="DEBUG" />
    <levelMax value="FATAL" />
  </filter>
  <ApplicationName>TestLoggerFichierConfig</ApplicationName>
  <LogName>AgentLogger</LogName>
</appender>

Я прочитал, что журнал событий должен быть перезапущен при добавлении нового журнала, чтобы последние события отображались в нем.Я сделал это, и это позволило мне увидеть новый журнал, который был создан, но ничего не пойдет туда.Можно ли заставить Log4Net прекратить использование предыдущего журнала, а не использовать тот, который я определил в app.config?

Спасибо за помощь.

Обновление:
Похоже, что le EventLogs распознает исходное приложение и решает в журнале поместить новые события, так как он помнит, куда они делись ранее.Когда я впервые устанавливаю logName, он работает нормально.Если я остановлю приложение, изменю имя журнала и перезапущу его, событие все равно перейдет к предыдущему журналу.Если logName не существует в журнале событий, он будет создан, но не использован!Может быть что-то и нужно сделать, но это не в стороне от log4net, и может быть опасно изменять настройки Windows на этом уровне.Я создал два eventLogAppender в одном файле app.config, оба указывали на разные журналы.события попали в тот же журнал, хотя.Очевидно, что проблема не в log4net, и решение моей проблемы не будет решено кодом.Спасибо за отличные советы.

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Я столкнулся с этим, и дело не в log4net, а в переопределении источника в новый пользовательский журнал. Я вынул log4net из уравнения и обнаружил, что проблема возникла непосредственно из класса EventLog. В итоге я обнаружил, EventLog.CreateEventSource не создает собственный журнал

Я думаю, что это также является причиной Служба Windows всегда записывает в пользовательский журнал и журнал приложений

1 голос
/ 06 марта 2012

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

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

http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx

http://logging.apache.org/log4net/release/faq.html (см. Раздел устранения неполадок)

0 голосов
/ 06 марта 2012

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

<add key="log4net.Internal.Debug" value="true"/>

Возможно, я не совсем понимаю ваш вопрос, но я хотел бы убедиться, что вы оба создали appender и правильно сообщили log4net, что вы действительно хотите использовать этот appender:

  <log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\SomeApplication.xml"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <countDirection value="1"/>
  <maxSizeRollBackups value="30"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
    <locationInfo value="true"/>
  </layout>
</appender>

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="SomeDistributionList@somehost.com"/>
  <from value="SomeApplication@somehost.com"/>
  <subject type="log4net.Util.PatternString" value="Some Application Error - %property{log4net:HostName}"/>
  <smtpHost value="smtp.somehost.com"/>
  <bufferSize value="1"/>
  <threshold value="ERROR"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %property{log4net:HostName} %logger %level %newline%newline%property{ExceptionThrottleInformation}%newline%newline%message%newline"/>
  </layout>
  <filter type="SomeNamespace.SomeSubNamespace.Log4Net.ExceptionThrottleFilter, SomeSubNamespace">
    <threshold value="10"/>
    <thresholdTimeoutSeconds value="60"/>
    <timeoutSecondsBetweenMessages value="600000"/>
    <exceptionText value="Timeout expired"/>
  </filter>
</appender>

<appender name="DatabaseAppender" type="SomeNamespace.SomeSubNamespace.DatabaseTraceAppender, SomeSubNamespace">
  <hoursToKeepInformationalTraces value="48"/>
  <hoursToKeepErrorTraces value="96"/>
  <threshold value="INFO"/>
</appender>

<root>
  <level value="INFO"/>
  <appender-ref ref="RollingFileAppender"/>
  <appender-ref ref="SmtpAppender"/>
  <appender-ref ref="DatabaseAppender"/>
</root>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...