Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# log4net日志记录来自不同项目的未处理异常_C#_Log4net_Log4net Configuration_Raygun.io_Raygun - Fatal编程技术网

C# log4net日志记录来自不同项目的未处理异常

C# log4net日志记录来自不同项目的未处理异常,c#,log4net,log4net-configuration,raygun.io,raygun,C#,Log4net,Log4net Configuration,Raygun.io,Raygun,我的解决方案中有几个项目,其中大多数是windows服务。我为每个配置了log4net(为每个配置生成一个单独的日志文件),并为log4net配置了Raygun appender。我希望捕获这些项目中每个项目的未处理异常,并获得它们起源的信息(在日志文件和raygun仪表板中),我希望在一个位置为解决方案中的所有项目执行此操作 因此,我创建了一个单独的静态类和方法来记录这些异常 如何记录异常,以便日志文件显示生成该错误的类而不是记录器静态类(以及让raygun.io dashboard显示异常

我的解决方案中有几个项目,其中大多数是windows服务。我为每个配置了log4net(为每个配置生成一个单独的日志文件),并为log4net配置了Raygun appender。我希望捕获这些项目中每个项目的未处理异常,并获得它们起源的信息(在日志文件和raygun仪表板中),我希望在一个位置为解决方案中的所有项目执行此操作

因此,我创建了一个单独的静态类和方法来记录这些异常

  • 如何记录异常,以便日志文件显示生成该错误的类而不是记录器静态类(以及让raygun.io dashboard显示异常的正确来源)=>

    Logger.UnhandledException[错误]-这现在是错误的。它应该是异常发生的类名

  • 我会为此创建线程安全的单例吗?这是正确的方法吗

静态类:

public static class Logger
{
    private static readonly ILog Log = LogManager.GetLogger(Assembly.GetEntryAssembly().FullName);

    public static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        Log.Error(e);
    }
}
Windows服务:

private static void Main(string[] args)
{

        Configure.Serialization.Xml();

        // Unhandled exceptions - subscribe to the event (I would do this to all my projects in the solution)
        AppDomain.CurrentDomain.UnhandledException += Logger.UnhandledException;
}

无法获取发生未处理异常的位置的类名,除非在事件处理程序中使用堆栈上的反射,而在发布版本中并不保证为您提供类名

未处理的异常在Windows服务中应该是异常的,并进行适当的错误处理:将
Main
代码包装在
try..catch
子句中,并捕获服务代码中可能发生的异常。如果仍然发生未处理的异常,您至少可以使用堆栈跟踪,这将允许您识别异常的来源