Log4Qt 日志格式化(SimpleLayout)

Posted 一去丶二三里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4Qt 日志格式化(SimpleLayout)相关的知识,希望对你有一定的参考价值。

星标/置顶 公众号????,硬核文章第一时间送达!

1

关于 format()

和其它布局一样,SimpleLayout 也派生自 Layout。正如其名所示,SimpleLayout 特别的简单,因为它只包含了日志的级别和消息内容。

根据源码,可以很快了解这一点:

QString SimpleLayout::format(const LoggingEvent &event)
{
    if (mShowLevel)
        return event.level().toString() + QStringLiteral(" - ") + event.message() + Layout::endOfLine();

    return event.message() + Layout::endOfLine();
}

这里最关键的是 format(),它是 Layout 中的一个纯虚函数,用于格式化消息的输出。也就是说,所有的 Layout(例如:PatternLayoutSimpleLayoutTTCCLayout)都是通过这个函数来确定具体要输出哪些信息的。

LoggingEvent 派生自 QEvent,它是一个日志相关的事件,包含了日志的一切必要信息,例如:日志级别、日志内容、线程名等。

在实际场景中,一般很少会用到 SimpleLayout,因为它包含的信息特别少。之所以讲解它,主要是为了让大家快速理解各个 Layout 的实现方式,以及如何自定义 Layout

2

SimpleLayout

创建一个 SimpleLayout,并将日志信息输出至控制台中:

#include <QCoreApplication>
#include <log4qt/logger.h>
#include <log4qt/simplelayout.h>
#include <log4qt/consoleappender.h>
#include <log4qt/loggerrepository.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建一个 SimpleLayout(输出日志的级别和消息内容)
    Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();
    Log4Qt::SimpleLayout *layout = new Log4Qt::SimpleLayout();
    layout->setName("My Layout");
    // layout->setShowLevel(false);
    layout->activateOptions();

    // 创建一个 ConsoleAppender(将日志内容输出到控制台上)
    Log4Qt::ConsoleAppender *appender = new Log4Qt::ConsoleAppender(layout, Log4Qt::ConsoleAppender::STDOUT_TARGET);
    appender->setName("My Appender");
    appender->activateOptions();
    logger->addAppender(appender);

    logger->setLevel(Log4Qt::Level::DEBUG_INT);
    logger->debug("Hello, Log4Qt!");

    // 关闭 logger
    logger->removeAllAppenders();
    logger->loggerRepository()->shutdown();

    return a.exec();
}

运行程序,输出如下:

DEBUG - Hello, Log4Qt!

可以看到,输出信息只包含了日志的级别和消息内容,并没有线程、Logger、日期时间等内容。

如果不想输出日志级别,可以打开代码中的注释部分:

layout->setShowLevel(false);

再次运行程序,输出如下:

Hello, Log4Qt!

可以看到,输出信息中只包含了消息内容,并没有日志级别。

3

使用配置文件

编写一个配置文件 - log4qt.properties,执行与上例中使用相同的任务:

# 定义 rootLogger
log4j.rootLogger=DEBUG, console

# 定义 ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.immediateFlush=true
log4j.appender.console.target=STDOUT_TARGET

# 为 ConsoleAppender 定义 Layout
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
#log4j.appender.console.layout.showLevel=false

如果要输出日志级别,可以注释掉 showLevel 所在行,或者将值改为 true。

然后,使用下面的程序:

#include <QCoreApplication>
#include <log4qt/logger.h>
#include <log4qt/loggerrepository.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 获取 rootLogger
    Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();

    // 打印消息
    logger->debug("Hello, Log4Qt!");

    // 关闭 rootLogger
    logger->removeAllAppenders();
    logger->loggerRepository()->shutdown();

    return a.exec();
}

运行程序,输出如下:

DEBUG - Hello, Log4Qt!

可以看出,使用配置文件和纯代码的效果是一样的。

往期推荐

☞ 专辑 | 趣味设计模式

☞ 专辑 | 音视频开发

☞ 专辑 | C++ 进阶

☞ 专辑 | 超硬核 Qt

☞ 专辑 | 玩转 Linux

☞ 专辑 | GitHub 开源推荐

☞ 专辑 | 程序人生

关注公众「高效程序员」????,一起优秀!

回复 “入群” 进技术交流群,回复 “1024” 获取海量学习资源。

以上是关于Log4Qt 日志格式化(SimpleLayout)的主要内容,如果未能解决你的问题,请参考以下文章

Log4Qt 日志格式化(TTCCLayout)

Log4Qt 日志格式化(PatternLayout)

Log4Qt 输出重定向(控制台)

Log4Qt快速入门——Log4Qt日志输出重定向源码解析

qt里面用log4qt日志库

请教log4qt的日志分类问题