c++ - 初学者 : How to use the Pantheios logging API library as a replacement for #ifdef DEBUG? 如何定义 SEVLEVEL?

标签 c++ logging pantheios

我想在动态搜索算法中记录很多事件(例如关于收敛到全局最优的信息)。此日志记录应该有一个开关来关闭/打开它。现在有很多实现这一目标的可能性:

  • 实现算法的日志版本和非日志版本 -> 冗余
  • 使用宏 -> 丑陋且不安全
  • 使用 c++ 日志库(或:使用日志库功能范围的 1%)。

我决定使用 Pantheios,特别是因为提出了性能要求(不想因为这种日志记录而损失太多性能,这只在开发中需要)。我不得不承认,我不需要这个库的很多功能,但我认为我会是一种更好/更安全的使用方式。也许会有一个我不知道的更合适的替代方案(我只需要为日志记录进行编译时决策 -> 不知道是否有为此目的设计的日志记录库)。

在编译、安装和最终链接之后(手动链接没有成功,但是使用 scons 构建工具;使用 gcc -> 显式链接),我想尝试一个小例子。

让我们将其简化为如下内容:

#include "pantheios/pantheios.hpp"
#include "pantheios/frontends/stock.h"
const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = "pantheios_test";    // specify process identity

int main()
{
    pantheios::log_ALERT("alert-event");
    pantheios::log_DEBUG("debug-event");
    pantheios::log_INFORMATIONAL("just information");
    return 1;
}

链接是通过以下文件完成的:

LIBS=['pantheios.1.core.gcc44', 'pantheios.1.be.fprintf.gcc44', 'pantheios.1.bec.fprintf.gcc44', 'pantheios.1.fe.all.gcc44', 'pantheios.1.util.gcc44']

现在的简单问题是:如何关闭/打开控制台输出?如何选择给后端的严重级别?

查看文档让我找到了很多具有严重级别的函数,但这些函数会自动调用一次以进行初始化。我知道严重级别的动态变化是可能的。我不确切地知道,我在哪里更改这些设置。我认为它们应该在前端组件中。链接到“fe_all”是否已经决定了哪个级别被记录,哪个级别没有?

这应该相对容易,因为在我的例子中,我只需要一个关于登录/注销的编译时决定。

感谢您的帮助。

萨沙

最佳答案

Is linking to "fe_all" already some kind of decisions which level is logged ad which level isn't?

简短的回答:是的。

fe.all 启用所有严重级别:记录“所有”消息。

如果你想要更好的控制,试试 fe.simple。默认情况下,它会打开调试版本中的所有内容以及发布中除 DEBUG 和 INFO 之外的所有内容。您可以随时更改阈值 - 在调试或发布时 - 通过调用 fe.simple header (pantheios/frontends/fe.simple.h,iirc)中的函数 pantheios_fe_simple_setSeverityThresdhold()(或类似的东西)。

请注意,Pantheios 被描述为一个日志记录 API 库。我认为其目的是它提供了一个 API、初始化控制和对现有“丰富”日志库的输出。它提供“库存”前端和后端,方便用户 (i) 快速上手,以及 (ii) 简单的要求(您的程序可能符合要求)。

顺便说一句,我认为 project site 上的 Pantheios 论坛得到了很好的支持,所以您可能想在这里和那里发布问题。

关于c++ - 初学者 : How to use the Pantheios logging API library as a replacement for #ifdef DEBUG? 如何定义 SEVLEVEL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277422/

相关文章:

c++ - 如何在使用 GDB 遍历代码时禁用步进 C++ 模板?

c++ - 为什么在命令提示符下输入 3 时我的代码没有退出?

c# - MVVM - 在 View 中显示来自多个模型实体的消息

c++ - 如何使用 pantheios 登录到文件?

c++ - Pantheios:太大时创建一个新的日志文件

c++ - c++ 日志库异步捕获高吞吐量数据的可行性?

c++ - 将大括号包围的 block 放置在预期表达式的位置的 C++ 语法是什么?

c++ - 如何打印最长公共(public)子序列?

python - 使用并行 python 时记录

python - 在 python 中配置根记录器