带有 log4net 的 Raygun 不记录
Raygun with log4net not logging
我有一个简单的控制台应用程序。下载 log4net nuget 包以及 log4net raygun nuget 包:https://www.nuget.org/packages/log4net.Raygun/。我已将我的应用程序设置为记录异常和信息消息,我确实在我的日志文件中得到了这些信息,但不是在 raygun 仪表板中,我也没有收到来自 raygun.io 的电子邮件。我做错了什么?
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>
编辑:
我添加了调试,"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'
你需要告诉 log4net 读取配置,在你的 main 方法中添加以下行:
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>
一些建议。您的 CurrentDomain_UnhandledException
处理程序正在将 UnhandledExceptionEventArgs
对象传递给 log4net 以进行记录,而不是事件上的 ExceptionObject
。对于 log4net.Raygun
处理异常,您可能需要这样的东西:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Log.Error(e.ExceptionObject);
}
您遇到的另一个问题是,默认情况下 log4net.Raygun
会在后台任务中将消息发送到 Raygun。在您的简单控制台应用程序中,您的应用程序在后台任务完成之前退出并卸载,因此消息从未真正发送过。您可以通过将以下设置添加到附加程序配置来禁用后台发送错误:
<appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun">
...
<sendInBackground value="false" />
...
</appender>
我有一个简单的控制台应用程序。下载 log4net nuget 包以及 log4net raygun nuget 包:https://www.nuget.org/packages/log4net.Raygun/。我已将我的应用程序设置为记录异常和信息消息,我确实在我的日志文件中得到了这些信息,但不是在 raygun 仪表板中,我也没有收到来自 raygun.io 的电子邮件。我做错了什么?
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>
编辑: 我添加了调试,"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'
你需要告诉 log4net 读取配置,在你的 main 方法中添加以下行:
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>
一些建议。您的 CurrentDomain_UnhandledException
处理程序正在将 UnhandledExceptionEventArgs
对象传递给 log4net 以进行记录,而不是事件上的 ExceptionObject
。对于 log4net.Raygun
处理异常,您可能需要这样的东西:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Log.Error(e.ExceptionObject);
}
您遇到的另一个问题是,默认情况下 log4net.Raygun
会在后台任务中将消息发送到 Raygun。在您的简单控制台应用程序中,您的应用程序在后台任务完成之前退出并卸载,因此消息从未真正发送过。您可以通过将以下设置添加到附加程序配置来禁用后台发送错误:
<appender name="RaygunAppender" type="log4net.Raygun.RaygunAppender, log4net.Raygun">
...
<sendInBackground value="false" />
...
</appender>