需要一个巧妙的方法,在编译时删除和添加日志函数[英] Need a clever way of removing and adding log functions at compile time

问题描述

你好,

我一直在尝试找到一种巧妙的方法来从 C++ 程序中删除和添加日志记录函数调用.日志函数调用一个"记录器"类,但我想删除不同的日志级别,让维护者最头疼.

我们已经有了正常的文件#undef WARN 等程序,但我正在努力改进这一点.基本上,尝试编写这样的代码:

MODULE_LOG ("MyModule", ALARM);int MyClass::Function (int 参数){警报 ("打印");WARN ("无打印");}


理想情况下,这将编译为:
int MyClass::Function (int 参数){logger::alarm_print_function ("Print");}


因此,"WARN"定义已被删除.

如果维护者想要查看 WARN 消息,那么他们可以更改代码,如下所示:
MODULE_LOG ("MyModule", ALARM, WARN);


理想情况下,这将编译为:
int MyClass::Function (int 参数){logger::alarm_print_function ("Print");logger::warn_print_function ("无打印");}


这样维护者可以只更新一个模块.如前所述,这可以通过WARN等正常的#undef/#define等来完成.

我想知道是否有更聪明的方法来做到这一点?


谢谢.

推荐答案

您可以使用以下宏:
#define ALARM(x) logger::alarm_print_function(x)#define WARN(x)

这将做你想做的事.然后只需更改宏定义以根据需要生成不同的代码.

但是,有时最好让所有代码保持启用状态并使用运行时标志来生成消息,例如:
static bool ALARM = ;static bool WARNING = false;void MyClass::Function (int 参数){如果(警报)logger::alarm_print_function ("Print");如果(警告)logger::warn_print_function ("无打印");}

并添加另一个函数以在运行时将相关变量设置为 true.

本文地址:https://www.itbaoku.cn/post/1395173.html