2013-02-26 4 views
11

Ничего не происходит при следующей конфигурации.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!"); 
    } 
} 
+0

Какая версия студии? –

+0

Visual Studio 2012 + Windows 8. – timmkrause

ответ

13

Вы пропускаете конфигурацию корня, так что вам нужно что-то вроде

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

+0

В сочетании со схемой сверстников он, наконец, работал. Спасибо! :) Существует один последний недостаток: записи в журнале появляются только в том случае, если я запускаю сам файл .exe, но не тогда, когда я нажимаю f5. Любая идея об этом последнем? – timmkrause

+0

У вас есть сообщения об ошибках в окне вывода Visual Studio? Раздел debug = "true" в приведенном выше конфиге должен предоставить вам информацию о том, что делает log4net, и должен включать сообщения об ошибках, если он не работает. (Вероятно, вы хотите отключить режим отладки при работе в журнале) – sgmoore

+0

«log4net: ERROR [EventLogAppender] ErrorCode: GenericFailure. Попал в SecurityException, пытаясь получить доступ к EventLog. Скорее всего, источник событий Log4NetEventViewer.vshost.exe не существует и должен быть создан местным администратором ». - Я начал использовать .exe в качестве администратора для создания источника события, но не для VS или версии vshost. Запускать .vshost.exe как администратора тоже было недостаточно, потому что он начал использовать .exe с суффиксом «-clr2» или что-то в этом роде. Выполнение VS как администратора однажды разрешило его. СПАСИБО! – timmkrause

5

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

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

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

+0

Я уже пробовал это, а затем удалял его снова, потому что он не имел никакого эффекта. – timmkrause

+0

Извините, вы были правы. После того, как я добавил элемент , предоставленный sgmoore, он все еще не работал, но после того, как я добавил вашу строку в AssemblyInfo.cs, он сработал. – timmkrause

0

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

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ EventLog \ MyApp

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

<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> 

Удачи.

 Смежные вопросы

  • Нет связанных вопросов^_^