调试一个Windows服务,添加db logging to catch子句一个坏主意?

时间:2008-12-10 15:13:35

标签: .net windows-services error-handling

我正在尝试调试Windows服务。

在Catch()子句中添加错误记录是不是一个坏主意?

我的日志记录正在使用数据库记录错误btw。

4 个答案:

答案 0 :(得分:3)

当你提到调试和记录时,我不是100%清楚你正在尝试做什么。

如果是整体日志记录方法的一部分,那么登录catch子句通常是一个好主意。

如果您在调试服务之后有两个选项 - 如果您可以控制从服务外部尝试调试的代码(通过某些外部激励),或者如果您在执行代码之前有一些时间,那么可以简单地在VS中打开源代码,只要您在调试模式下编译,就可以将VS附加到服务进程。

然后,源代码中设置的任何断点都可以让您访问debug中的代码。

但是,如果您不能这样做(例如,如果您需要调试启动事件),可以将System.Diagnostics.Debugger.Break()添加到源代码中,当此行启动调试器时在运行时点击。

我通常用编译符号将这些语句包装在#if #endif区域控件中。

答案 1 :(得分:2)

在我负责的服务中,初始化后发生的任何错误(在代码确认它可以连接到数据库,有权访问日志文件并开始工作之后)都会被放入其日志文件中。启动或关闭时发生的错误将发送到事件日志。

答案 2 :(得分:2)

通常,记录异常是一个好主意。特别是在调试服务时,这总是一项艰巨的任务。

您可以遇到的唯一问题是日志记录本身会导致异常。当我登录到事件日志时,这发生在我身上(有关详细信息,请参阅this question)。这意味着您不会获得导致服务失败的异常的信息。

出于调试目的,我认为将异常记录到本地文本文件中是有用的,除了您执行的任何其他记录之外。这是最不可能失败的。 完成调试后,可以删除其他日志记录命令。 (嗯,这样做时你必须小心不要引入新的错误......)

答案 3 :(得分:1)

这取决于代码。在我的一些服务上,我将信息记录到数据库(因为这是此处的策略),但是我有一个辅助日志记录机制,在记录到数据库失败的情况下将消息添加到事件日志中。您必须问自己的问题是“如果您无法连接到数据库,那么错误会发生什么?”