Windows services 将多线程windows服务中的异常写入事件日志

Windows services 将多线程windows服务中的异常写入事件日志,windows-services,exception-handling,event-log,Windows Services,Exception Handling,Event Log,我有一个多线程windows服务,它将不可预测地每24小时左右停止运行一次。我正在向事件日志写入数据,这一切都进行得很顺利,但每当服务崩溃时,事件日志中都没有消息(即使服务停止,尽管AutoLog=true)。有没有办法让未捕获的异常直接写入日志,即使它们不在原始线程中?首先,生成的线程应该有一个顶级try{}。。。catch{}块,用于捕获抛出到它们上的异常(如果合适的话,还包括吞咽或重试)。除此之外,您还可以使用该事件捕获任何未处理的异常并将其注销。在顶级try-catch中,您会捕获什么?

我有一个多线程windows服务,它将不可预测地每24小时左右停止运行一次。我正在向事件日志写入数据,这一切都进行得很顺利,但每当服务崩溃时,事件日志中都没有消息(即使服务停止,尽管AutoLog=true)。有没有办法让未捕获的异常直接写入日志,即使它们不在原始线程中?

首先,生成的线程应该有一个顶级
try{}。。。catch{}
块,用于捕获抛出到它们上的异常(如果合适的话,还包括吞咽或重试)。除此之外,您还可以使用该事件捕获任何未处理的异常并将其注销。

在顶级try-catch中,您会捕获什么?在这个层次上,我假设你不确定你在捕捉什么,在这种情况下,我认为你不应该捕捉任何东西?@Ziplin:这将是一个
捕捉
抛出
的场景。虽然您无法从异常中恢复,但在顶层捕获它允许您记录信息(或类似的内容),然后重新播放它?我以为那总是一个否定no@Ziplin:不<代码>抛出e刚刚
抛出。将捕获的异常作为throw语句的一部分是不允许的,因为它会重置堆栈跟踪;仅仅调用
throw
是不行的。@Ziplin:捕捉并“吞下”它们是不可能的。捕获一般异常(在应用程序的高级别)以记录它,然后重新引用它,这没有什么错。