csdn上很多log4qt教学文章写的都是logger->debug("hello");这种调用方式
其实这个不是正确的调用方法,可能是旧版本是这样调用的,这样写是没有行号等信息的
当前版本(2024.9)的正确方式是使用作者指定的lq4Debug等几个宏来输出,但是这几个宏不能单独用,要配合LOG4QT_DECLARE_QCLASS_LOGGER并且是在类里面才能用,具体用法参照https://blog.csdn.net/kl222/article/details/127124550
于是我直接仿造源码里的lq4Debug:
改造成这样就可以了(注意是添加不是改源码),不论是类里还是全局函数等地方到处都能用
#define Myl4qFatal(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::FATAL_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::FATAL_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
#define Myl4qError(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::ERROR_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::ERROR_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
#define Myl4qWarn(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::WARN_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::WARN_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
#define Myl4qInfo(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::INFO_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::INFO_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
#define Myl4qDebug(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::DEBUG_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::DEBUG_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
#define Myl4qTrace(pLogger,...) \
for (bool enabled = pLogger->isEnabledFor(Log4Qt::Level::TRACE_INT); enabled; enabled = false) \
Log4Qt::MessageLogger(pLogger, Log4Qt::Level::TRACE_INT, __FILE__, __LINE__, Q_FUNC_INFO).log(__VA_ARGS__)
qDebug() << u8"qDebug你好\n";
pLogger_Log4Qt->debug(u8"log你好\n");
Myl4qDebug(pLogger_Log4Qt,u8"log你好-有行号\n");