log4cxx是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,便于问题排查和调试,log4cxx是apache软件基金会的开源项目,基于APR实现跨平台支持。一个良好的日志系统不管是开发、测试还是后期维护,对一个项目来说都是非常重要的。
在linux环境下,由于log4cxx是依赖于apr的,因此先安装apr和apr-util这两个库,apr、apr-util下载参考地址为http://apr.apache.org/download.cgi,由于本地存有之前安装apache时下载安装文件(apr-1.5.2.tar.gz,apr-util-1.5.4.tar.gz),直接使用。源文件均放置在/home/kedacom/下,安装步骤如下:
先安装apr库,
$>tar xvf apr-1.5.2.tar.gz
$>cd apr-1.5.2
$>./configuer --prefix=/usr/local/apr
$>make
$>make install
apr安装完成后,在/usr/local下产生apr目录,然后将apr-util库也安装同一目录下,
$>tar xvf apr-util-1.5.4.tar.gz
$>cd apr-util-1.5.4
$>./configuer --prefix=/usr/local/apr --with-apr=/usr/local/apr
$>make
$>make install
Log4cxx的下载地址为:http://logging.apache.org/log4cxx/download.html,下载源码包,下载完成后会有apache-log4cxx-0.10.0.tar.gz 文件,然后开始安装log4cxx。
$>tar xvf apache-log4cxx-0.10.0.tar.gz
$>cd apache-log4cxx-0.10.0
$>./configure --prefix=/usr/local/log4cxx --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-charset=utf-8 --with-logchar=utf-8
$>make
注意,Centos系统默认的编码格式为utf-8,所以在后面添加--with-charset=utf-8 --with-logchar=utf-8,防止输出中文时为乱码。执行make之后会出现如下报错:
inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope make[3]: *** [inputstreamreader.lo] 错误 1
解决方法:
src/main/cpp/inputstreamreader.cpp文件中添加#include <string.h>
src/main/cpp/socketoutputstream.cpp文件中添加#include <string.h>
src/examples/cpp/console.cpp文件中添加#include <string.h>和#include <stdio.h>
修改完成后,执行再次执行make和make install即可完成安装。
配置文件内容实例:
log4j.additivity.gather = false
log4j.rootLogger= debug, R, stdout//设置rootLogger为debug级别
//设置子logger,且子logger为debug级别
log4j.logger.G400 =debug, g400, stdout
//设置不继承父Logger
log4j.additivity.G400=false
log4j.appender.logfile.encoding=UTF-8
//标准输出,向控制台打印
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
//Root的输出设置
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=../../kdvlog/g400log/g400log.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=9
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern==%d [%5p](%F:%L) - %m%n
//子logger的输出设置
log4j.appender.g400=org.apache.log4j.RollingFileAppender
log4j.appender.g400.File=../../kdvlog/g400log/g400log.log
log4j.appender.g400.MaxFileSize=20MB
log4j.appender.g400.MaxBackupIndex=4
log4j.appender.g400.layout=org.apache.log4j.PatternLayout
log4j.appender.g400.layout.ConversionPattern==%d{yyyy-MM-dd HH:mm:ss}[%c]-[%p] %m%n
配置文件说明:
1、debug为日志级别,按优先级从低到高,日志的级别分别为debug, info, warn,error, fatal。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如这里定义了info级别,则应用程序中比info等级低的所有级别(此处只有debug级别)的日志信息将不被打印出来。
2、appender日志输出位置,log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender //控制台
org.apache.log4j.FileAppender //文件
org.apache.log4j.DailyRollingFileAppender //每天产生一个日志文件
org.apache.log4j.RollingFileAppender //文件大小到达指定尺寸的时候产生一个新的文件
org.apache.log4j.WriterAppender //将日志信息以流格式发送到任意指定的地方
3、Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即debug,info,warn,error,fatal
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出2017-9-14 15:16:17,890
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。