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