多年来,我经常遇到以下问题模式:
我正在为一个包编写复杂的代码,该包由一个独立的应用程序和一个人们可以在其他应用程序内部使用的核心库版本组成。
我们自己的应用程序和用户使用核心库创建的应用程序都可能以批处理模式(离线、脚本化、远程和/或从命令行)以及交互方式运行。
库/应用程序需要复杂且大量的运行时输入,并且可能存在各种类似错误的输出,包括严重错误消息、输入语法警告、状态消息和运行统计信息。请注意,这些都是附带的输出,而不是应用程序的主要目的,应用程序将在其他地方显示或保存并使用不同的方法。
如果以交互方式运行,其中一些(可能只有非常严重的)可能需要一个对话框;但如果在批处理模式下运行,它需要登录而不停止用户输入;如果作为库运行,客户端程序显然希望在错误发生时拦截和/或检查错误。
这一切都需要跨平台:Linux、Windows、OSX。我们希望解决方案在任何平台上都不奇怪。例如,输出到 stderr 对 Linux 来说很好,但在链接到 GUI 应用程序时不能在 Windows 上工作。
库的客户端程序可以创建主类的多个实例,如果客户端应用程序能够区分每个实例的单独错误流,那就太好了。
让我们假设每个人都同意库方法通过简单的调用(错误代码和/或严重性,然后类似于 printf 的参数给出错误消息)记录错误就足够了。有争议的部分是客户端应用程序如何记录或检索它。
多年来我已经多次这样做了,但从未对解决方案完全满意。此外,这种子问题实际上对用户来说并不是很重要(如果出现问题,他们希望查看错误日志,但他们并不真正关心我们实现它的技术),但这个话题让程序员们兴奋不已他们总是在这个细节上浪费过多的时间,而且永远不会很开心。
任何人都知道如何将此功能集成到 C++ API 中,或者是否有公认的范例或良好的开源解决方案(不是 GPL,请,我想要一个可以在商业封闭应用程序和 OSS 中使用的解决方案项目)?