MengRao/fmtlog

fmtlog::setLogLevel(fmtlog::DBG);没有生效

tilongzs opened this issue · 8 comments

使用了说明里的代码:
logi("A info msg"); logd("This msg will not be logged as the default log level is INF"); fmtlog::setLogLevel(fmtlog::DBG); logd("Now debug msg is shown"); fmtlog::poll();
结果输出中,依然仅仅输出了A info msg,而没有输出Now debug msg is shown

你看看有没有#define FMTLOG_ACTIVE_LEVEL FMTLOG_LEVEL_DBG

既然已经有了setLogLevel(),为啥还要额外定义FMTLOG_ACTIVE_LEVEL,就不能简单点统一

setLogLevel()是运行时过滤,有一些性能开销;FMTLOG_ACTIVE_LEVEL 是编译时过滤,没有性能开销。另外还可以定义宏FMTLOG_NO_CHECK_LEVEL,不做运行时log level的检查。这些都是各种优化选项,有的用户会需要。

所以这俩就冲突了呗。当定义FMTLOG_ACTIVE_LEVEL时,就应该让setLogLevel()产生编译错误,而不是运行出“意外”结果。

这两个可以同时使用不冲突,比如FMTLOG_ACTIVE_LEVEL禁用debug,setLogLevel动态禁用info

另外,setLogLevel传入的是变量,没法在编译时检查

这两个可以同时使用不冲突,比如FMTLOG_ACTIVE_LEVEL禁用debug,setLogLevel动态禁用info

fmtlog.h里默认#define FMTLOG_ACTIVE_LEVEL FMTLOG_LEVEL_INF,导致了我使用fmtlog::setLogLevel(fmtlog::DBG)无效,你管这叫不冲突?
我作为普通用户拿着文档示例代码都出现意外结果,你总不能说我没从头到尾看一遍你的说明文档吧,虽然你的确在README的最后一段写了FMTLOG_ACTIVE_LEVEL 。我没想到默认启用,还导致setLogLevel无效。

我把默认的FMTLOG_ACTIVE_LEVEL修改成FMTLOG_LEVEL_DBG了,你更新下吧