首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用log4net日志记录的Raygun

不使用log4net日志记录的Raygun
EN

Stack Overflow用户
提问于 2015-02-16 22:59:05
回答 2查看 1.6K关注 0票数 4

我有一个简单的控制台应用程序。下载了log4net nuget包以及log4net射线枪nuget包:https://www.nuget.org/packages/log4net.Raygun/。我已经设置了我的应用程序来记录异常和信息信息,我确实在我的日志文件中得到了这些信息,但没有在射线枪仪表板中,也没有从raygun.io收到电子邮件。我做错了什么?

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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>

编辑:我添加了调试和“XmlConfigurator.Configure()”;这是我得到的(但是,在Raygun.io仪表板中仍然没有出现错误):

代码语言:javascript
复制
...
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-17 09:35:44

您需要告诉log4net读取配置,在main方法中添加以下行:

代码语言:javascript
复制
log4net.Config.XmlConfigurator(Watch = true);

或者将以下属性放入您的assamblyinfo.cs中:

代码语言:javascript
复制
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

如果这样做不起作用,您可以启用log4net内部调试来查看log4net内部代码中发生了什么:

代码语言:javascript
复制
<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常见问题

票数 4
EN

Stack Overflow用户

发布于 2015-02-18 18:05:39

几个建议。您的CurrentDomain_UnhandledException处理程序将UnhandledExceptionEventArgs对象传递给log4net以记录事件,而不是将ExceptionObject传递给事件。对于log4net.Raygun处理异常,您可能需要如下所示:

代码语言:javascript
复制
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Log.Error(e.ExceptionObject);
}

另一个问题是,默认情况下,log4net.Raygun将在后台任务中将消息发送给雷炮。在您的简单控制台应用程序中,您的应用程序在后台任务完成之前正在退出和卸载,因此该消息从未实际发送。可以通过将以下设置添加到附录配置中来禁用后台发送错误:

代码语言:javascript
复制
<appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun">
...
    <sendInBackground value="false" />
...
</appender>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28551817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档