4

我刚开始使用Pantheios,感觉它真的是一个很棒的日志库!甚至可能是 C++ 中最伟大的一个!恭喜作者!

但是,我在文档和所有论坛帖子中都找不到有关如何在日志中包含调用类和行号的任何内容。

我使用be.file作为后端,并定义了自定义前端,查看fe.simple的示例。这是否与PANTHEIOS_EXTERN_C const char PANTHEIOS_FE_PROCESS_IDENTITY[]或我完全错误的方式有关?

4

2 回答 2

5

这个问题的答案实际上在库下载中包含的常见问题解答文件中。我有一个固定后端 DLL,其中包含以下标头,并且我能够在日志文件中包含类、函数和行号。

#include <pantheios/pantheios.hpp>
#include <pantheios/frontends/fe.N.h>
//#include <pantheios/frontends/fe.simple.h>
#ifndef PANTHEIOS_INCL_PANTHEIOS_H_TRACE
#define PANTHEIOS_TRACE_PREFIX         __FILE__ "(" PANTHEIOS_STRINGIZE(__LINE__) "): " __FUNCTION__ ": "
#endif /* PANTHEIOS_INCL_PANTHEIOS_H_TRACE */
#include <pantheios/trace.h>
#include <pantheios/inserters.hpp>
#include <pantheios/backends/bec.file.h>    // be.file header

这里发生的情况是,您必须在包含 trace.h 之前重新定义 PANTHEIOS_TRACE_PREFIX,这就是我在上面显示的内容。包含其他代码行只是为了向您展示#define 的去向。并对延迟的回复感到抱歉。如果您希望我可以在我的博客上发布一个带有固定后端 DLL 项目的下载,任何人都可以在他们的解决方案中使用它来进行简单的基于文件的日志记录。如果您对该项目感兴趣,请发表评论

更新 2/28/2010 12:53 AM CST:供您参考,这里是常见问题解答中的问题:

Q9:“Pantheios 是否提供了一种配置,该配置产生一条包含包含函数的记录消息,相当于:

   log(informational, __FUNCTION__, ": my message");

无需编写(或检查编译器支持的一些包装器)。” [2008 年 3 月 15 日]

A9:您需要将 PANTHEIOS_TRACE_PREFIX 定义为您想要的。默认情况下它是__FILE__ "(" PANTHEIOS_STRINGIZE(__LINE__) "): ",它给出了格式<file>(<line>):

要包含该功能,可以说您希望它具有 format <file>(<line>): <func>:。为了实现这一点,您将其定义如下:

#include <pantheios/pantheios.h>
#define PANTHEIOS_TRACE_PREFIX         __FILE__ " " PANTHEIOS_STRINGIZE(__LINE__) ": " __FUNCTION__ ": "
#include <pantheios/trace.h>

请注意,定义必须在包含 pantheios/trace.h 之前。因此,更安全的方法如下:

/* File: myPantheiosRootHeader.h */
#include <pantheios/pantheios.h>

#ifdef PANTHEIOS_INCL_PANTHEIOS_H_TRACE
# error pantheios/trace.h must not be included before myPantheiosRootHeader.h
#endif /* PANTHEIOS_INCL_PANTHEIOS_H_TRACE */

#define PANTHEIOS_TRACE_PREFIX         __FILE__ " " PANTHEIOS_STRINGIZE(__LINE__) ": " __FUNCTION__ ": "
#include <pantheios/trace.h>
于 2010-02-28T06:51:14.170 回答
0

我还没有找到自动包含该信息的方法 - 如果您使用 __LINE__ 宏,您当然可以将行号添加到日志消息本身。不过,不确定它的便携性如何。

于 2010-02-26T18:27:23.657 回答