简体   繁体   English

Raygun与log4net没有记录

[英]Raygun with log4net not logging

I have a simple console app. 我有一个简单的控制台应用程序 Downloaded log4net nuget package as well as log4net raygun nuget package: https://www.nuget.org/packages/log4net.Raygun/ . 下载了log4net nuget包以及log4net raygun nuget包: https ://www.nuget.org/packages/log4net.Raygun/。 I've set up my app to log exceptions and info messages and I do get those in my log file, but NOT in raygun dashboard, Nor do I get emails from raygun.io. 我已经设置了我的应用程序来记录异常和信息消息,我确实在我的日志文件中得到了这些,但不是在raygun仪表板中,我也没有收到来自raygun.io的电子邮件。 What am I doing wrong? 我究竟做错了什么?

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: 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: I've added debugging and "XmlConfigurator.Configure();" 编辑:我添加了调试和“XmlConfigurator.Configure();” this is what I get (However, still no errors show up in Raygun.io dashboard) : 这是我得到的(但是,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'

You need to tell log4net to read the configuration, add the following line in you main method: 您需要告诉log4net读取配置,在main方法中添加以下行:

log4net.Config.XmlConfigurator(Watch = true);

Or put the following attribute in your assamblyinfo.cs: 或者在assamblyinfo.cs中添加以下属性:

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

If that is not working you can enable log4net internal debugging to see what is going on in the log4net internal code: 如果这不起作用,您可以启用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 Log4net常见问题

A couple of suggestions. 一些建议。 Your CurrentDomain_UnhandledException handler is passing the UnhandledExceptionEventArgs object to log4net for logging instead of the ExceptionObject on the event. 您的CurrentDomain_UnhandledException处理程序将UnhandledExceptionEventArgs对象传递给log4net以进行日志记录,而不是事件上的ExceptionObject For log4net.Raygun to process the exception you probably want something like this: 对于log4net.Raygun来处理异常,你可能想要这样的东西:

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

The other issue you're having is that by default log4net.Raygun will send the message to Raygun in a background task. 您遇到的另一个问题是默认情况下log4net.Raygun会在后台任务中将消息发送给Raygun。 In your simple console app, your application is exiting and unloading before the background task completes, so the message is never actually sent. 在您的简单控制台应用程序中,您的应用程序在后台任务完成之前退出和卸载,因此消息实际上从未发送过。 You can disable the background sending of errors by adding the following setting to your appender configuration: 您可以通过将以下设置添加到appender配置来禁用后台发送错误:

<appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun">
...
    <sendInBackground value="false" />
...
</appender>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM