前言:

log4cxx的配置文件完全和log4j相同,但是比较别扭的地方就是log4j使用com.aa.bb这样组织类,用在log4cxx中多少有点别扭(无论如何也不会有人在命名空间中嵌套那么多)。

http://erera.net/blog/log4cxx.html日志操作利器log4cxx

今天看了一场今年的比赛,jaedong对阵stork,非常精彩。突然感觉星际里的微操和大局观就类同C和C++的开发,写C代码的时候就满脑子的字节、移位、共享内存、文件描述符之类的,C++就考虑类、模板、重载、IO流、标准库了。这只是个引子,在C开发一直用openlog(), syslog() 来记录日志,虽然方便,但不够强大。今天来看一下C++中的一些日志操作库。

流行的一些C++日志库有好些,比如 , , , 功能依次增强吧。

当前的状况是,log4cplus已然停止开发许久;log4cpp去年突然有了更新,升级到1.0稳定版;log4cxx今年有了更新,现在属于 apache的一个项目;boost log功能最强,而且文档十分详尽,不过不清楚为何当年申请进入boost库被reject。前三个有着共同的前缀log4,意思是它们都是从 apache优秀的日志操作库port出来的。优秀的实现总是在多个语言和平台上都会被人借鉴。

文档状况是,除了boost log外文档都很匮乏,主要参照内容就是生成的API文档。

性能上,一些早期的资料表明log4cpp性能相当出众,它也是较早移植log4j的C++库,log4cxx是后来apache自己的一个移植,具体性能影响和你使用的配置有关系。log4cxx是个线程安全并且支持多种appender的日志库。

其他细节,log4cpp提供了一个对比表。log4cxx

log4j日志系统由三大类组成,它们又各自派生出不同功能的子类:

Layout 用来控制输出日志消息的显示样式

Appender 用来输出日志到某些设备上,比如文件、syslog、socket等

Category 在log4cxx里叫作 Logger,真正完成日志记录功能按日期记录日志

这里给出一个最常用的例子,就是按日期生成日志,但是代码异常简单。#include #include #include #include #include #include #include #include #include #include #include #include using namespace log4cxx;

using namespace log4cxx::rolling;

using namespace log4cxx::xml;

using namespace log4cxx::filter;

using namespace log4cxx::helpers;

void dailyRolling() {

PropertyConfigurator::configure(File("/etc/log4cxx.properties")); // Configure file, log4j format

LoggerPtr logger(Logger::getLogger("org.apache.log4j.DailyRollingFileAppender")); // Appender name

LOG4CXX_DEBUG(logger, "Hello World!");    // Debug level

LOG4CXX_INFO(logger, "Log4cxx's birth."); // INFO level

} log4j配置

虽然C++代码可以写的很简单,但是我们可以进行很复杂的配置,让log4cxx灵活的记录信息,比如上边指定了配置文件/etc/log4cxx.properties,这是一个Java特性文件:

Log4j配置由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。逐一解释下:日志信息的优先级

Logger的语法:log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如这里定义了 INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName名字任意,用来标示日志信息输出到哪里,可以同时指定多个。日志信息的输出目的地

Appender的语法:log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender 控制台

org.apache.log4j.FileAppender 文件

org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件

org.apache.log4j.RollingFileAppender 文件大小到达指定尺寸的时候产生一个新的文件

org.apache.log4j.WriterAppender 将日志信息以流格式发送到任意指定的地方日志信息的输出格式

Layout的语法:log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN

其中,Log4j提供的Layout有以下几种:

org.apache.log4j.HTMLLayout 以HTML表格形式布局

org.apache.log4j.PatternLayout 可以灵活地指定布局模式

org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串

org.apache.log4j.TTCCLayout 包含日志产生的时间、线程、类别等等信息

Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息

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

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出2008年11月14日 15:16:17,890

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

c语言 log4c,日志操作利器log4cxx 分享相关推荐

  1. java 可视化系统操作日志_技术文 | 日志框架使用技巧分享

    原标题:技术文 | 日志框架使用技巧分享 日志的意义 对于一个应用程序来说日志记录是具有重要意义的. 日志通常用于线上问题追踪,协助定位业务问题或程序问题,以及基于日志的业务逻辑统计分析等. java ...

  2. 日志分析利器splunk的搭建、使用、破解

    2019独角兽企业重金招聘Python工程师标准>>> 日志分析利器splunk的搭建.使用.破解博主对splunk的了解不多,博主的使用目的是为了同步,分析日志.当初的搭建也是为了 ...

  3. 使用Log4j进行日志操作(牛小浩)不错的

    使用Log4j进行日志操作   一.Log4j简介   (1)概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是 ...

  4. SLS:海量日志数据管理利器

    原文链接:http://click.aliyun.com/m/13917/ SLS:海量日志数据管理利器 日志是大规模集群管理系统中非常关键的部分,服务器上的各种日志数据(如访问日志.应用日志等)可以 ...

  5. 容器日志采集利器Log-Pilot

    容器时代越来越多的传统应用将会逐渐容器化,而日志又是应用的一个关键环节,那么在应用容器化过程中,如何方便快捷高效地来自动发现和采集应用的日志,如何与日志存储系统协同来高效存储和搜索应用日志.本文将主要 ...

  6. golang odbc mysql_go语言通过odbc操作Access数据库的方法

    本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-od ...

  7. c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf

    纯C语言实现面向对象分析与示例分享 采用 语言实现的关键是如何运用 语言本身的特性来实现多态.继承面.封装的面向对 C C 象的特征最近给出了例子,大家可以参考使用 , C语言的对象化模型 面向对象的 ...

  8. 使用Log4j进行日志操作

    使用Log4j进行日志操作 英文原文 内容: 1. 概述   1.1. 背景   1.2. Log4j简介 2.一个简单的例子   2.1. 不使用Log4j   2.2. 迁移到Log4j   2. ...

  9. 计算机二级c语言考试上机内容,计算机二级c语言上机考试操作步骤及流程

    计算机二级c语言上机考试操作步骤及流程 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 二级 C 语言上机考试操作步骤一.进入考试 ...

  10. PDPS汉化包安装与语言界面切换操作

    ProcessSimulate和ProcessDesigner安装之后的软件界面默认都是英文的,但其实PDPS在14.0.2版本之后就有官方的中文界面了.而该语言设置并非在PDPS软件安装的过程中进行 ...

最新文章

  1. strace,ltrace linux下跟踪进程调用的命令
  2. Hibernate中常见的异常
  3. java 防止url重复请求_Web项目如何防止客户端重复发送请求
  4. 为什么要始终启用编译器警告?
  5. oracle 10g rac 停止,Oracle10g RAC 关闭及启动
  6. debain服务器系统用什么,建站服务器系统用CentOS还是Debian 适合自己才好
  7. c++核心编程第一部分讲义_java并发编程实战-第一部分总结
  8. 这种反人类的工作被机器人取代,我举双手双脚赞成
  9. Amlogic机顶盒开发工具使用
  10. Jasperreports5.6支持PDF微软雅黑字体
  11. chorme浏览器广告终结者视频白频解决办法
  12. HashMap底层实现原理详解
  13. python程序写诗_用Python光速为你写诗
  14. 第三方登陆--狸菇凉_
  15. html excel导出的路径,html 导出多个excel表格数据-如何将html页面中的表格导出到excel表格...
  16. 文献类型参考文献的文献标识码
  17. 抖音做直播有哪些技巧,抖音新手直播应该注意什么:国仁楠哥
  18. maven配置SSM框架整合 其中包括maven在使用过程中遇到的问题
  19. my_RIO实现小车避障
  20. 中电科45家研究所:北上第一梯队,南京、成都、合肥和重庆第二梯队

热门文章

  1. Uva_156 Ananagrams ( map 的应用 )
  2. 心形函数的正确打开方式(Unity3D Shader)
  3. [20130827]A Short History of Nearly Everything[serial]
  4. 必须了解的网络运维知识
  5. 有一张厚度为0.1mm的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可达(再对折一次就超过)珠穆朗玛峰的高度?(C语言)
  6. webstorm加载webpack
  7. 基于html人事管理报告,人事管理工作实习报告范文
  8. 上古卷轴5捏脸php导入,上古卷轴5捏脸预设导入 上古卷轴5捏脸预设怎么导入
  9. 解决荣耀magicbook Linux版 无线网卡驱动安装不上的问题
  10. Java url链接生成二维码