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

m_p*_*tor 4 c++ logging pantheios

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

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

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

oss*_*cad 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
Run Code Online (Sandbox Code Playgroud)

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

2010年2月28日上午12:53 CST:以下是FAQ的问题供大家参考:

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

   log(informational, __FUNCTION__, ": my message");
Run Code Online (Sandbox Code Playgroud)

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

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

要包含该功能,让我们说它希望它具有该格式<file>(<line>): <func>:.为此,您可以按如下方式定义:

#include <pantheios/pantheios.h>
#define PANTHEIOS_TRACE_PREFIX         __FILE__ " " PANTHEIOS_STRINGIZE(__LINE__) ": " __FUNCTION__ ": "
#include <pantheios/trace.h>
Run Code Online (Sandbox Code Playgroud)

请注意,定义必须在包含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>
Run Code Online (Sandbox Code Playgroud)