我正在寻找一种将跟踪输出到我的代码中的日志文件的方法,该代码在 linux 上运行。
我不想在我部署它的每个地方都将打印信息包含在二进制文件中。
在 Windows 中,我只是使用WPP进行跟踪,而没有将实际的跟踪字符串放入我的二进制文件中。
如何在 Linux 中实现这一点?
我正在寻找一种将跟踪输出到我的代码中的日志文件的方法,该代码在 linux 上运行。
我不想在我部署它的每个地方都将打印信息包含在二进制文件中。
在 Windows 中,我只是使用WPP进行跟踪,而没有将实际的跟踪字符串放入我的二进制文件中。
如何在 Linux 中实现这一点?
我对这方面的Linux工具不是很熟悉,所以也许有更好的系统。但是,由于没有其他人提出任何好的建议,我会提出一个建议。(可能不是一个很好的建议,但我现在能想到的最好的。)
理论上,你可以继续使用 wpp。Wpp 只是一个模板系统。它扫描配置和输入文件以创建数据结构。然后它运行一个模板,填充它从扫描中获得的数据值,生成 tmh 文件。您可以创建一组使用 Linux api 而不是 Windows api 的新模板,并以与其他日志解码器系统一起使用的方式记录消息字符串。
我现在才注意到这个问题,并且想在故事中加上我的两分钱,只是为了一个案例。就个人而言,我非常欣赏 Windows WPP Tracing,并认为它可能是同类工具中用于实际开发故障排除的最佳工程解决方案。
碰巧我将 WPP 的使用扩展到类 Unix 平台两次。我们希望在总体上使用 WPP 概念的强大方面,并在多平台代码片段中使用它。这不是移植,而是我们在 Windows 上配置的特定 WPP 使用的包装器。有一次我们有一个 Web 服务来在 Windows 上执行实际的 WPP 预处理;这可能听起来有点疯狂,但它在本地网络中运行良好且有效。在每次编译发送 Web 请求之前执行的包装脚本,获取处理后的文件并对生成的包含文件进行后处理,以使其适用于类 Unix 平台。第二次我们实现了一个我们自己的简化 WPP 预处理器(我们发现它还有其他用途 - 例如,我们可以为生产和单元测试生成不同的跟踪语句)。这是一个苛刻的解决方案:
我不认为 Linux 世界有可以与 WPP 相媲美的框架。曾经我什至认为为 WPP 制作一个开源移植项目可能是一个好主意。我不确定它是否会被要求很多。我说这是一个很棒的工程解决方案。但是谁想做肮脏的工程工作呢?开源社区更喜欢抽象的面向对象和通用的解决方案,流式传输和相应工具的必要性较低(WPP 需要特殊的管理工具和操作系统支持)。易于编写代码是当今的选择。
WPP 缺乏普及也可能是微软的错误(或不愿意)。他们将其保留为一个内部框架,仅通过 Windows DDK 的一个案例出现,因为他们必须为驱动程序开发人员提供一些日志记录/跟踪解决方案。甚至没有人注意到 WPP 也非常适合用户空间代码。例如,用于 C# 的 WPP 预处理器从未公开过。
尽管如此,我仍然认为将 WPP 移植到 Unix/Linux 工作可能是一个具有挑战性、有趣甚至有用的尝试。如果有人决定领导它。:)