首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在代码中启用/禁用spdlog日志记录?

如何在代码中启用/禁用spdlog日志记录?
EN

Stack Overflow用户
提问于 2017-08-11 03:23:43
回答 3查看 8.1K关注 0票数 7

我正在我的应用程序中创建c++库模块。要做日志记录,我使用spdlog。但是在生产环境中,我不希望我的lib模块做任何日志记录。实现打开/关闭的一种方法是在我的代码中使用#ifdef条件语句,比如...

代码语言:javascript
运行
复制
#ifdef logging
  // call the logger here.
#endif

我正在寻找一种方法来避免写这些条件句。可以是执行#ifdef检查并编写它的包装函数。但这种方法的问题是,我必须为每个日志方法(如info、trace、warn、error等)编写包装器。

有没有更好的方法?

EN

回答 3

Stack Overflow用户

发布于 2018-06-18 17:56:23

您可以使用set_level()禁用日志记录

代码语言:javascript
运行
复制
auto my_logger = spdlog::basic_logger_mt("basic_logger", "logs/basic.txt");

#if defined(PRODUCTION)
    my_logger->set_level(spdlog::level::off);
#else
    my_logger->set_level(spdlog::level::trace);
#endif

spdlog::register_logger(my_logger);
票数 8
EN

Stack Overflow用户

发布于 2020-04-27 20:16:59

通过添加以下宏(在包含spdlog.h之前),可以在编译代码之前禁用所有日志记录:

代码语言:javascript
运行
复制
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_OFF
#include<spdlog.h>

它在文件https://github.com/gabime/spdlog/blob/v1.x/include/spdlog/spdlog.h中解释为注释:

代码语言:javascript
运行
复制
//
// enable/disable log calls at compile time according to global level.
//
// define SPDLOG_ACTIVE_LEVEL to one of those (before including spdlog.h):
// SPDLOG_LEVEL_TRACE,
// SPDLOG_LEVEL_DEBUG,
// SPDLOG_LEVEL_INFO,
// SPDLOG_LEVEL_WARN,
// SPDLOG_LEVEL_ERROR,
// SPDLOG_LEVEL_CRITICAL,
// SPDLOG_LEVEL_OFF
//

使用此宏还将加快您的高效代码,因为日志记录调用将从您的代码中完全删除。因此,这种方法可能比使用my_logger->set_level(spdlog::level::off);更好

但是,为了使完整的代码删除起作用,您需要在日志记录时使用这两个宏之一:

代码语言:javascript
运行
复制
SPDLOG_LOGGER_###(logger, ...)

SPDLOG_###(...)

其中###TRACEDEBUGINFOWARNERRORCRITICAL中的一个。

后一个宏使用默认记录器spdlog::default_logger_raw(),前者可以与自定义记录器一起使用。可变参数...代表日志记录调用的常规参数: fmt字符串,后跟一些要拼接到消息中的值。

票数 2
EN

Stack Overflow用户

发布于 2017-08-11 03:34:23

我不知道spdlog。

但是,您可以在一个常用的包含文件中定义一个宏,将日志调用替换为空,或者调用一个空的内联函数,编译器优化器将消除该函数。

在"app.h“中

代码语言:javascript
运行
复制
#ifndef LOG

#ifdef logging
#define LOG spdlog
#endif

#ifndef logging
#define LOG noop
#endif

#endif

你明白了吗?

这让你的大部分代码保持不变

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45621996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档