如何从Windows服务中捕获标准错误输出?

8
我有一个应用程序使用Mozilla LDAP库。我们正在诊断涉及LDAP库无法连接到服务器的问题。我正试图通过将库的调试版本与应用程序一起启用debug(使用ldap_set_opt),以从LDAP库中获取更多信息。不幸的是,我认为调试库正在向标准错误发送调试字符串。
尽管我正在重新编译LDAP客户端库,希望启用使其调用OutputDebugString而不是流式传输到stderr的选项,但一个好的解决方案是将stderr输出捕获到文件中。然而,该应用程序正在作为Windows服务运行。
有人知道我如何为作为服务运行的应用程序重定向stderr输出到文件吗?
编辑
我希望不必修改服务源代码。服务配置中的选项最理想。
2个回答

6

你可以尝试手动重定向标准错误输出吗?

    FILE* stderr_redirect = freopen( "C:/stderr.log", "w", stderr );

    // Code that writes to stderr

    fclose( stderr_redirect );

编辑:

除了自己处理这些流之外,没有办法为服务重定向标准输出或标准错误。一些服务提供将这些消息重定向到文件的选项。您可以暂时重定向这些流,或者在下次出现问题时添加一个选项使您的服务可配置。


嗯...好的,谢谢确认,Naaff。我想我会开始工作了。 - veefu
这种方法适用于使用fputs将其内部调试记录器输出到stderr的log4cxx。 SetStdHandle无效。 - bvj

5

如果你正在修改服务的代码,你可以在ServiceMain中调用SetStdHandle

SetStdHandle(STD_ERROR_HANDLE, logFileHandle);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接