2015-02-16 3 views
3

У меня есть простое консольное приложение. Загруженный пакет log4net nuget, а также пакет log4net raygun nuget: https://www.nuget.org/packages/log4net.Raygun/. Я настроил свое приложение для регистрации исключений и информационных сообщений, и я получаю их в своем файле журнала, но НЕ на панели управления Raygun, также не получаю письма от raygun.io. Что я делаю не так?Raygun с log4net не регистрируется

private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    Log.Error(e); 
} 

private static void Main(string[] args) 
{ 
    XmlConfigurator.Configure(); 

    // Unhandled exceptions 
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
throw new Exception("test exception"); 

} 

Web.Config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- log4net --> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="ErrorLog//ErrorLog.txt" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="1MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> 
     </layout> 
    </appender> 

    <appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun"> 
     <threshold value="DEBUG" /> 
     <apiKey value="MY SUPER AWESOME KEY HERE" /> 
     <!-- Attempt to send errors to raygun 15 times --> 
     <retries value="15" /> 
     <!-- Wait 1 minute between retry attempts --> 
     <timeBetweenRetries value="00:01:00" /> 
     <!-- Toggles whether to only send exceptions to raygun, or to also send messages logged to ERROR --> 
     <onlySendExceptions value="false" /> 
     <!-- Optional filters for filtering exceptions and messages before sending to raygun --> 
     <!--<exceptionFilter value="SomeOtherAssembly.SensitiveInformationMessageFilter, SomeOtherAssembly" /> 
     <renderedMessageFilter value="SomeOtherAssembly.SensitiveInformationMessageFilter, SomeOtherAssembly" />--> 
    </appender> 

    <root> 
     <level value="ALL" /> 
     <appender-ref ref="LogFileAppender" /> 
     <appender-ref ref="RaygunAppender" /> 
    </root> 
    </log4net> 

    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.2.13.0" newVersion="1.2.13.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

EDIT: Я добавил отладки и "XmlConfigurator.Configure();" это то, что я получаю (Тем не менее, до сих пор никаких ошибок не отображаются в Raygun.io приборной панели):

... 
log4net: RaygunAppender: Building Raygun message 
log4net: RaygunAppender: Resolving application assembly 
log4net: RaygunAppender: No exception object found in error, creating raygun error message from the rendered message and calling class 
log4net: RaygunAppender: Sending Raygun message in a background task. Retries: '15', TimeBetweenRetries: '00:01:00' 
+1

Вы должны активировать режим внутренней отладки log4net для проверки потенциальных проблем в структуре регистрации: https://logging.apache.org /log4net/release/faq.html (seach для «внутренней отладки») – samy

+0

Вы также можете проверить неправильную конфигурацию, вызвав это сделать тест после конфигурации - 'var messages = LogManager.GetRepository(). ConfigurationMessages.Cast ();' и увидев, что что-то возвращается: другой вариант - проверить во время выполнения загрузку приложения Raygun и настроить его конфигурацию в порядке – stuartd

ответ

4

Вы должны сказать log4net читать конфигурацию, добавьте следующую строку в вас основной метод:

log4net.Config.XmlConfigurator(Watch = true); 

Или поставить следующий атрибут в вашей assamblyinfo.cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

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

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

... 

    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
</configuration> 

Log4net FAQ

+0

, который исправил его. ОДНАКО, я не получаю ошибок при запуске моего консольного приложения в VS2013. только когда я исполняю exe-файл. Почему это? – ShaneKm

2

Несколько предложений. Ваш обработчик CurrentDomain_UnhandledException передает объект UnhandledExceptionEventArgs в log4net для ведения журнала вместо ExceptionObject. Для log4net.Raygun обработать исключение вы, вероятно, хотите что-то вроде этого:

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    Log.Error(e.ExceptionObject); 
} 

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

<appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun"> 
... 
    <sendInBackground value="false" /> 
... 
</appender> 
Смежные вопросы