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!");
    }
}

Ответ 1

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

<?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, вам нужен источник eventlog, называемый app.exe. Если этого не существует, то Log4net попытается создать его, но для этого требуются права администратора, поэтому вам может понадобиться запустить вашу программу как администратор хотя бы один раз, чтобы создать этот источник событий. Чтобы этого избежать, источник событий обычно создается как часть процедуры установки, которая уже запускается как администратор.

Ответ 2

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

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

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

Ответ 3

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

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>

Удачи.