log4cxx是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,便于问题排查和调试,log4cxx是apache软件基金会的开源项目,基于APR实现跨平台支持。一个良好的日志系统不管是开发、测试还是后期维护,对一个项目来说都是非常重要的。

1、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

2、log4cxx安装

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即可完成安装。

3、Log4cxx配置

配置文件内容实例:

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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

Log4cxx使用小结相关推荐

  1. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  2. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  3. php中$_REQUEST、$_POST、$_GET的区别和联系小结

    php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...

  4. log4cxx第三篇----使用多个logger

    使用多个logger时,所有logger的配置写在一个配置文件里面 两个例子: 1 一个继承的例子(http://logging.apache.org/log4cxx/) // file com/fo ...

  5. c cin.get()的用法小结_c语言中static 用法

    static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...

  6. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结

    Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...

  7. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  8. flash 入门课知识小结

    一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧) 1. 特点   帧--是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以 ...

  9. Eigen/Matlab 使用小结

    文章目录 [Eigen Matlab使用小结](https://www.cnblogs.com/rainbow70626/p/8819119.html) Eigen初始化 0.[官网资料](http: ...

  10. MATLAB【十三】————仿真函数记录以及matlab变成小结

    part one:matlab 编程小结. 1.char 与string的区别,char使用的单引号 '' ,string使用的是双引号"". 2.一般标题中的输出一定要通过 nu ...

最新文章

  1. 2020年人工神经网络第二次作业-参考答案第一题
  2. ( Android-源代码分享)
  3. Java记录 -55- Set下的HashSet
  4. Python 列表拷贝
  5. linux echo命令
  6. mysql左右连接举例_MYSQL 连接举例
  7. 20145202马超 《Java程序设计》 实验一 实验报告
  8. Linux下安装、配置、授权、调优Mysql
  9. flex blazeds java spring_flex+blazeds+java+spring后台消息推送
  10. 小米手机开启开发者模式的步骤与方法
  11. 希腊女孩创办自媒体教希腊语,如今用户已达1000人
  12. Mac OS开发之icns文件
  13. 重装系统,无法进入到硬盘启动
  14. TM1637数码管实验总结
  15. failed to connect to ‘192.168.31.157:5555‘: Connection refused
  16. 区别 |Python的 open() 和with open() as
  17. Visual Studio Code 快捷键 Mac 版
  18. 浙大愤青教授郑强经典语录
  19. ***编程DIY (Delphi版) - 第3篇 星号密码查看工具
  20. 4.5-那些漂亮软件是怎么做出来的?为啥自己做的好丑

热门文章

  1. 递归,举几个简单的例子
  2. 手机闪存速度排行_带大家了解一下 手机闪存UFS和EMMC的区别(科普)
  3. 基因、DNA、碱基、染色体之间的关系是什么?
  4. 输入100以内含7或7倍数的数
  5. keytool 常用命令
  6. rto净化效率计算公式_设备综合效率计算公式详解
  7. 全部口罩机3D图纸图档打包
  8. 赵小楼《天道》《遥远的救世主》深度解析(54)简单聊聊基督的信仰、教义和天堂的说法
  9. 如何解决OpenStack上Windows虚机CPU负荷
  10. ThreeJs基础代码段(五)飘扬的旗帜