log4cpp 日志库的使用

简述

平时调试c++、c程序和记录一些程序打印信息时,使用的最多的就是printf,但是终端显示有限,而且不利于统计,所以想把开源的日志库加入到工程中;测试对比了一些日志库,发现log4cpp比较适合我们的工程。
1)可以自由控制日志在终端和日志中的输出,同时或只记录在文件;
2)有配置文件,只需修改配置文件即可达到功能适配;
3)日志排版多样化,可自己定制;
4)日志可以分标签或者按模块输出;
5)控制日志个数和大小,不用担心日志无限增多,导致空间不足;

在此记录我的编译和测试过程,方便以后其他工程可以直接使用。

编译

测试使用的是 log4cpp-1.1.3.tar.gz

交叉编译库配置,在pc上编译库,不用这么麻烦

./configure CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++  --prefix=/home/xiangang/work/test/log4cpp/log4cpp/build --host=arm
make -j8
make install

这样在build目录下就可以生成4个目录

xiangang@xiangang:~/work/test/log4cpp/build$ ls
bin  include  lib  share
xiangang@xiangang:~/work/test/log4cpp/build/lib$ ls
liblog4cpp.a  liblog4cpp.la  pkgconfig

其中liblog4cpp.a就是我们所需要的静态库,头文件在include下面。

测试

在pc上测试
CMakeLists.txt

project(test)

#添加C++11支持
add_definitions(-std=c++11)

#添加头文件搜索路径
include_directories(/usr/local/include)

#添加库文件搜索路径
link_directories(/usr/local/lib)

#用于将当前目录下的所有源文件的名字保存在变量 DIR_SRCS 中
aux_source_directory(. DIR_SRCS)
add_executable(test ${DIR_SRCS})

#在这里根据名字log4cpp寻找文件
target_link_libraries(test log4cpp pthread)

Clog4Util.h

#ifndef CLOG4UTIL_INCLUDE
#define CLOG4UTIL_INCLUDE

#include "log4cpp/Category.hh"
#include "log4cpp/Appender.hh"
#include "log4cpp/FileAppender.hh"
#include "log4cpp/OstreamAppender.hh"
#include "log4cpp/Layout.hh"
#include "log4cpp/BasicLayout.hh"
#include "log4cpp/Priority.hh"
#include "log4cpp/PropertyConfigurator.hh"

#include <iostream>
#include <string>

using namespace std;

#define Debug(tag, ...) {log4cpp::Category& t_debug = log4cpp::Category::getInstance(tag); \
			t_debug.debug( __VA_ARGS__ );}
#define Info(tag, ...) {log4cpp::Category& t_debug = log4cpp::Category::getInstance(tag); \
			t_debug.info( __VA_ARGS__ );}

#endif

在同文件中,宏定义了debug和info,只是演示,后续我会定义更多的功能。

Clog4Util.cpp

#include "Clog4Util.h"

int Init(string initfilename) {
	try {
		log4cpp::PropertyConfigurator::configure(initfilename);
	}
	catch (log4cpp::ConfigureFailure&f) {
		std::cout << "Configure Problem " << f.what() << std::endl;//失败
		return -1;
	}
	return 0;
}

这个init函数是为了加载配置文件。

main.cpp

#include <stdio.h>

#include <ctype.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>  
#include <thread>
#include <time.h>

#include "Clog4Util.h"

int main(int argc, char *argv[])
{
    if(argc < 2){
        printf("Usage: %s base exponent \n", argv[0]);
        return 1;
    }

    Init(argv[1]);
    
    int count = 0;
    while(1)
    {
      count++;
      if(count > 2048)
      {
        break;
      }
      debug("mytest %s %d %x", "asdfaf", 1, 0x58);
  }
    return 0;
}

配置文件 log4cpp.conf

#-------定义rootCategory的属性-------

#指定rootCategory的log优先级是ERROR,其Appenders有两个,分别是console,TESTAppender
#log4cpp.rootCategory=DEBUG, console, TESTAppender
log4cpp.rootCategory=DEBUG, TESTAppender

#-------定义console属性-------

#consoleAppender类型:控制台输出
#下面这三条语句表示控制台输出的log输出的布局按照指定的格式;输出格式是:[%p] %d{%H:%M:%S.%l} (%c): %m%n
log4cpp.appender.console=ConsoleAppender
log4cpp.appender.console.layout=PatternLayout
#log4cpp.appender.console.layout.ConversionPattern=[%p] %d{%H:%M:%S} (%c)
log4cpp.appender.console.layout.ConversionPattern=[%p] %d{%H:%M:%S.%l} (%c): %m%n

#-------定义TESTAppender的属性-------

#RollingFileAppender类型:输出到回卷文件,即文件到达某个大小的时候产生一个新的文件
#下面的语句表示文件输出到指定的log文件,输出的布局按照指定的格式,输出的格式是:[%d{%Y-%m-%d %H:%M:%S.%l} - %p] (%c): %m%n
log4cpp.appender.TESTAppender=RollingFileAppender

#当日志文件到达maxFileSize大小时,将会自动滚动 1024 = 1k
log4cpp.appender.TESTAppender.maxFileSize=1024000

#maxBackupIndex指定可以产生的滚动文件的最大数
log4cpp.appender.TESTAppender.maxBackupIndex=5

#fileName指定信息输出到logs/irismatch.log文件
log4cpp.appender.TESTAppender.fileName=/home/xiangang/work/test/log4cpp/test/build/log.log

#PatternLayout 表示可以灵活指定布局模式
log4cpp.appender.TESTAppender.layout=PatternLayout

#append=true 信息追加到上面指定的日志文件中,false表示将信息覆盖指定文件内容
log4cpp.appender.TESTAppender.append=true
log4cpp.appender.TESTAppender.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S} - %p] (%c):%m%n
#log4cpp.appender.TESTAppender.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S.%l} - %p] (%c): %m%n

编译好后:./test log4cpp.conf 运行,即可看见log.log日志文件了。多次运行程序,日志会累加,当一个文件大小达到1024k时,会自动备份记录到新文件中,备份数量达到4个时,会进行覆盖。当然这是按我配置文件来的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值