gpt4 book ai didi

c++ - 库/应用程序组合的 C++ 错误处理/错误日志记录

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:42 24 4
gpt4 key购买 nike

多年来我经常遇到以下问题模式:

  • 我正在为一个包编写复杂的代码,该包由一个独立的应用程序和一个核心库版本组成,人们可以在其他应用程序中使用它。

  • 我们自己的应用程序以及用户可能使用核心库创建的应用程序都可能以批处理模式(离线、脚本、远程和/或从命令行)以及交互方式运行.

  • 库/应用程序接受复杂且大量的运行时输入,并且可能有各种类似错误的输出,包括严重错误消息、输入语法警告、状态消息和运行统计信息。请注意,这些都是附带的输出,而不是应用程序的主要目的,它们将在其他地方显示或保存并使用不同的方法。

  • 如果以交互方式运行,其中一些(可能只有非常严重的)可能需要一个对话框;但如果以批处理模式运行,它需要在不停止用户输入的情况下进行记录;如果作为库运行,客户端程序显然希望在错误发生时拦截和/或检查错误。

  • 这一切都需要跨平台:Linux、Windows、OSX。我们希望解决方案在任何平台上都不会奇怪。例如,输出到 stderr 适用于 Linux,但在链接到 GUI 应用程序时无法在 Windows 上运行。

  • 库的客户端程序可能会创建主类的多个实例,如果客户端应用程序能够区分每个实例的单独错误流,那就太好了。

  • 让我们假设每个人都同意库方法通过简单调用记录错误就足够了(错误代码和/或严重性,然后类似 printf 的参数给出错误消息)。有争议的部分是客户端应用程序如何记录或检索它。

这些年来我已经做过很多次了,但从未对解决方案完全满意。此外,这种子问题实际上对用户来说不是很重要(如果出现问题,他们想查看错误日志,但他们并不真正关心我们实现它的技术),但这个话题让程序员兴奋不已他们总是在这个细节上浪费过多的时间,而且永远不会很开心。

任何人都知道如何将此功能集成到 C++ API 中,或者是否有公认的范例或良好的开源解决方案(不是 GPL,拜托,我想要一个可以在商业封闭应用程序中使用的解决方案以及 OSS 项目)?

最佳答案

我们使用 Apache 的 Log4cxx对于日志记录来说,它并不完美,但提供了大量的基础设施和跨项目的一致方法。我相信它是跨平台的,尽管我们只在 Windows 上使用它。

它通过 ini 文件提供运行时配置,允许您控制日志文件的输出方式,如果您需要特定的行为(例如 UI 下的错误对话框),您可以编写自己的附加程序。

如果您图书馆的客户也采用它,那么它会将他们的日志输出集成到相同的日志文件中。

可以使用嵌套诊断上下文 (NDC) 功能支持主类实例之间的区分。

关于c++ - 库/应用程序组合的 C++ 错误处理/错误日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com