使用log4qt在qt项目中记录日志

2 篇文章 0 订阅
1 篇文章 0 订阅
log4qt是Apache Log4j项目用于Qt框架的C++移植版本。单一开发者,年初发布0.2版本。
和其他系log4*不同,log4qt默认静态编译进目标程序。
使用:
1. 解压log4qt到目标文件夹,如D:\Qt\下;
2. qt项目的pro文件中加入一行:include(D:\Qt\log4qt\src\log4qt\log4qt.pri)
       ;pri文件会将需要的h文件和cpp文件加入到qt项目中;
3. main.cpp中包含头文件include "log4qt/propertyconfigurator.h",
       在QApplication app(argc, argv);后面增加一行:
Log4Qt::PropertyConfigurator::configure(a.applicationDirPath()+ "/log4j.properties");
       log4j.properties符合log4j的配置文件的风格;
4. 需要记录日志的文件,头文件中包含头文件#include "log4qt/logger.h",
       在Q_OBJECT之后加入一行,LOG4QT_DECLARE_QCLASS_LOGGER,这样就可以使用logger()->error("what?")记录日志了;

疑问:
1. 怎样让日志文件以Append的方式写入?
2. 怎样以stream的方式(使用<<操作符)写日志?

更新:
2009-05-16
1. FileAppender有个属性叫appendFile,为true时以Append方式打开文件,为false时以Truncate方式打开文件,默认为false。可以调用FileAppender::setAppendFile(true),或者在配置文件中加一行log4j.appender.R.AppendFile=true。
RollingFileAppender是FileAppender的子类。

 

接着就是在debug下添加log4j.properties配置文件,详细配置请参看http://blog.sina.com.cn/s/blog_659defdb0100wbz2.html

http://blog.sina.com.cn/s/blog_659defdb0100wbyw.html



没用过Log4J和Log4CXX,初次接触Log4Qt,还真有点头昏脑胀,无论如何,先简单记录一下。

Log4Qt

Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为Log4Qt的直接资料太少了)。

Log4Qt主要是用来记录日志(有助于程序调试)。有3个主要的组件:

Logger
提供日志记录服务,可以有多个Logger存在,每个有它们自己的名字。Logger间存在隶属关系,有一个Logger称为根Logger。
Appender
用来指明将日志记录到什么地方:比如,控制台、文件、数据库,等等
Layout
控制日志的输出格式,可以类比一下C中的printf哈。

例子一

一个简单的使用Log4Qt的Qt程序:(使用基础配置和根logger)

#include <QtCore>
#include "logger.h"
#include "basicconfigurator.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Log4Qt::BasicConfigurator::configure();
    Log4Qt::Logger * log = Log4Qt::Logger::rootLogger();
    log->debug("Hello DbZhang800!");
    log->info("Hello Qt!");
    log->warn("Hello 1+1=2");
    return 0;
}

结果如下:

16 [0x00a56708] DEBUG root  - Hello DbZhang800!
16 [0x00a56708] INFO root  - Hello Qt!
16 [0x00a56708] WARN root  - Hello 1+1=2

例子二

稍微扩充一点,使用自己定义的logger

#include <QtCore>
#include "logger.h"
#include "basicconfigurator.h"

class Object
{
    Log4Qt::Logger * logger;
public:
    Object() {
        logger = Log4Qt::Logger::logger("Object");
        logger->info("Constructor");
    }

    ~Object() {
        logger->info("Destructor");
    }

};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Log4Qt::BasicConfigurator::configure();

    Object obj;
    return 0;
}

结果:

0 [0x00a56708] INFO Object  - Constructor
0 [0x00a56708] INFO Object  - Destructor

在类Object中,我们可以使用名为"Object"的Logger。恩,直接指定类名是可以的。可是我们现在在Qt下啊。Qt的元对象系统中包含类的名字,故尔我们可以直接使用。

例子三

用使用元对象系统,那么必须使用Q_OBJECT宏,然后我们从元对象系统获取类的名字,然后创建一个相应的logger就行了。

不过Log4Qt,既然是为Qt准备的,那么就要为Qt程序解忧嘛,也就是宏

LOG4QT_DECLARE_QCLASS_LOGGER

这个宏展开后成为该类的一个成员函数,返回一个Logger,我们就可以直接使用了:

#include <QtCore>
#include "logger.h"
#include "propertyconfigurator.h"

class Object:public QObject
{
    Q_OBJECT
    LOG4QT_DECLARE_QCLASS_LOGGER
public:
    Object(){logger()->info("constructor");}
    ~Object(){logger()->info("destructor");}
};

#include "main.moc"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Log4Qt::PropertyConfigurator::configure(a.applicationDirPath() + "/log4qt.conf");
    Object obj;
    return 0;
}

程序的输出结果如下:

2011-10-29 13:52:06 [Object]-[INFO] constructor
2011-10-29 13:52:06 [Object]-[INFO] destructor

注意,本例中,我们没有使用默认配置,而是使用了一个配置文件log4qt.conf,放在了可执行程序所在目录下面

log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

额,没错,里面的这些东西确实都是以log4j打头的,所以需要看log4j的手册来搞清楚这些东西:

  • 配置rootLogger,高于DEBUG的日志被输出,定义一个appender,取名为A1
  • 配置A1,输出到控制台
  • 设置A1采用的layout,并设置其具体格式

Log4j配置文件

我是不是太了解,简单整理一下:

配置根Logger

其语法

log4j.rootLogger = [level], appenderName1, appenderName2, ...

其中:

  • level 控制日志输出的级别:

OFF

关闭所有日志输出

FATAL

 

ERROR

建议使用的几个级别?,高于指定级别的日志才被输出

WARN

INFO

DEBUG

TRACE

 

ALL

所有日志均输出

  • appenderName 是appender的名字,指定输出到哪儿

注:除rootLogger外,还可以对各个logger分别设置

log4j.logger.myLogName = [level], appenderName1, appenderName2, ...
配置Appender

语法

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.optionN = valueN 

name可以任意取,Log4j提供的appender有:

org.apache.log4j.ConsoleAppender

控制台

org.apache.log4j.FileAppender

文件

org.apache.log4j.DailyRollingFileAppender

每天产生一个日志文件

org.apache.log4j.RollingFileAppender

文件大小到达指定尺寸的时候产生一个新的文件

配置layout

语法

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.optionN = valueN 

其中:

log4j提供的layout有

org.apache.log4j.HTMLLayout

以HTML表格形式布局

org.apache.log4j.PatternLayout

可以灵活地指定布局模式

org.apache.log4j.SimpleLayout

包含日志信息的级别和信息字符串

org.apache.log4j.TTCCLayout

包含日志产生的时间、线程、类别等等信息

格式控制符:

%m

输出代码中指定的消息

%p

输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%c

输出logger的名字,通常就是所在类的全名

%n

输出一个回车换行符

%d

输出时间,默认格式为ISO8601,也可以指定格式,比如:%d{yyyy MMM dd HH:mm:ss},类似:2011年10月28日 14:10:28

参考


http://blog.csdn.net/dbzhang800/article/details/6916948

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt5集成log4qt的过程主要包括以下几个步骤: 1. 下载log4qt库:首先需要从log4qt的官方网站或者其他可靠的资源网站下载log4qt的源代码库。将下载的库解压到任意目录下。 2. 添加库到Qt项目:打开Qt Creator,打开需要集成log4qt项目。在项目的.pro文件添加log4qt库,可以使用类似于`LIBS += -L/path/to/log4qt -llog4qt`的方式添加。 3. 配置log4qt的头文件和源文件:在Qt Creator,找到项目目录的头文件和源文件文件夹,将解压的log4qt的包含文件和源文件拷贝到对应的文件夹。 4. 编译并链接log4qt库:在Qt Creator,点击编译按钮进行编译,并确保log4qt库能够成功链接到项目。如果编译或链接出现问题,可以检查是否添加了正确的库路径和库文件。 5. 使用log4qt:在需要使用日志功能的代码文件,包含log4qt的头文件,并根据需要创建log4qt日志记录器对象。通过设置日志记录器的级别、格式等参数,可以配置日志的输出方式。 6. 输出日志使用log4qt日志记录器对象,可以通过不同的日志级别(如DEBUG、INFO、ERROR等)输出不同等级的日志信息。可以使用log4qt提供的API函数,将日志输出到控制台、文件等不同的目的地。 7. 测试和调试:完成上述步骤后,可以对项目进行测试和调试。在运行项目时,可以根据配置的日志级别,查看和分析log4qt输出的日志信息,以辅助项目的测试和调试工作。 总结起来,集成log4qtQt5项目的过程包括添加库、配置头文件和源文件、编译链接库、使用log4qt输出日志等步骤。通过正确配置和使用log4qt,可以方便地实现日志功能,从而提高项目的测试和调试效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值