如何使用Pantheios在日志中包含调用类和行号?

时间:2010-02-26 18:16:37

标签: c++ logging pantheios

我刚刚开始使用Pantheios,感觉非常像一个很棒的日志库!也许是C ++中最伟大的一个!恭喜作者!

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

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

2 个答案:

答案 0 :(得分:5)

答案实际上是在库下载中包含的FAQ文件中。我有一个固定的后端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项目的下载,任何人都可以在他们的解决方案中使用简单的基于文件的日志记录。如果您对该项目感兴趣,请发表评论

2010年2月28日上午12:53 CST:以下是常见问题解答中的问题:

问题9:“Pantheios是否提供产生记录消息的配置      包含contains函数,相当于:

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

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

A9:   你需要#define PANTHEIOS_TRACE_PREFIX到你想要的。默认情况下   它是__FILE__ "(" PANTHEIOS_STRINGIZE(__LINE__) "): ",它给出了。{1}}   格式<file>(<line>):

要包含该功能,我们说您希望它具有格式<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>

答案 1 :(得分:0)

我还没有找到自动包含该信息的方法 - 如果您使用__LINE__宏,您当然可以将行号添加到日志消息中。但不确定这是多么便携。