log4net с EventLogAppender не входит

Ничего не происходит со следующей конфигурацией.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <log4net>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

Form1.cs (пример)

public partial class Form1 : Form
{
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    public Form1()
    {
        InitializeComponent();

        log.Fatal("Test!");
    }
}

3 ответа

Решение

Вам не хватает конфигурации root, поэтому вам нужно что-то вроде

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <log4net debug="true">
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <applicationName value="MyApp" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
      </appender>


      <root>
        <level value="All" />
        <appender-ref ref="EventLogAppender" />
      </root>


  </log4net>
</configuration>

Также обратите внимание, что если ваша программа называется app.exe, то вам нужен источник журнала событий app.exe. Если этого не существует, Log4net попытается его создать, но для этого требуются права администратора, поэтому вам может потребоваться запустить вашу программу от имени администратора хотя бы один раз, чтобы создать этот источник событий. Чтобы избежать этого, источник событий обычно создается как часть процедуры установки, которая уже будет работать от имени администратора.

Вы должны добавить:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

в AssemblyInfo.cs вашего проекта. Это инициализирует регистратор. И поместите log4net в файл с именем log4net.config.

Убедитесь, что вы дали права на запись своему пользователю:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ EventLog \ MyApp

и если вы хотите добавить больше логеров, следуйте этой номенклатуре:

<root name="EventLog">
<level value="ALL"/>
<appender-ref ref="FirstLog"/>
</root>

<logger name="FileLogger" additivity="false">
<level value="ALL" />
<appender-ref ref="Secong_Log" />
</logger>

Удачи.

Другие вопросы по тегам