c语言 log4c,日志操作利器log4cxx 分享
前言:
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 分享相关推荐
- java 可视化系统操作日志_技术文 | 日志框架使用技巧分享
原标题:技术文 | 日志框架使用技巧分享 日志的意义 对于一个应用程序来说日志记录是具有重要意义的. 日志通常用于线上问题追踪,协助定位业务问题或程序问题,以及基于日志的业务逻辑统计分析等. java ...
- 日志分析利器splunk的搭建、使用、破解
2019独角兽企业重金招聘Python工程师标准>>> 日志分析利器splunk的搭建.使用.破解博主对splunk的了解不多,博主的使用目的是为了同步,分析日志.当初的搭建也是为了 ...
- 使用Log4j进行日志操作(牛小浩)不错的
使用Log4j进行日志操作 一.Log4j简介 (1)概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是 ...
- SLS:海量日志数据管理利器
原文链接:http://click.aliyun.com/m/13917/ SLS:海量日志数据管理利器 日志是大规模集群管理系统中非常关键的部分,服务器上的各种日志数据(如访问日志.应用日志等)可以 ...
- 容器日志采集利器Log-Pilot
容器时代越来越多的传统应用将会逐渐容器化,而日志又是应用的一个关键环节,那么在应用容器化过程中,如何方便快捷高效地来自动发现和采集应用的日志,如何与日志存储系统协同来高效存储和搜索应用日志.本文将主要 ...
- golang odbc mysql_go语言通过odbc操作Access数据库的方法
本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-od ...
- c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
纯C语言实现面向对象分析与示例分享 采用 语言实现的关键是如何运用 语言本身的特性来实现多态.继承面.封装的面向对 C C 象的特征最近给出了例子,大家可以参考使用 , C语言的对象化模型 面向对象的 ...
- 使用Log4j进行日志操作
使用Log4j进行日志操作 英文原文 内容: 1. 概述 1.1. 背景 1.2. Log4j简介 2.一个简单的例子 2.1. 不使用Log4j 2.2. 迁移到Log4j 2. ...
- 计算机二级c语言考试上机内容,计算机二级c语言上机考试操作步骤及流程
计算机二级c语言上机考试操作步骤及流程 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 二级 C 语言上机考试操作步骤一.进入考试 ...
- PDPS汉化包安装与语言界面切换操作
ProcessSimulate和ProcessDesigner安装之后的软件界面默认都是英文的,但其实PDPS在14.0.2版本之后就有官方的中文界面了.而该语言设置并非在PDPS软件安装的过程中进行 ...
最新文章
- strace,ltrace linux下跟踪进程调用的命令
- Hibernate中常见的异常
- java 防止url重复请求_Web项目如何防止客户端重复发送请求
- 为什么要始终启用编译器警告?
- oracle 10g rac 停止,Oracle10g RAC 关闭及启动
- debain服务器系统用什么,建站服务器系统用CentOS还是Debian 适合自己才好
- c++核心编程第一部分讲义_java并发编程实战-第一部分总结
- 这种反人类的工作被机器人取代,我举双手双脚赞成
- Amlogic机顶盒开发工具使用
- Jasperreports5.6支持PDF微软雅黑字体
- chorme浏览器广告终结者视频白频解决办法
- HashMap底层实现原理详解
- python程序写诗_用Python光速为你写诗
- 第三方登陆--狸菇凉_
- html excel导出的路径,html 导出多个excel表格数据-如何将html页面中的表格导出到excel表格...
- 文献类型参考文献的文献标识码
- 抖音做直播有哪些技巧,抖音新手直播应该注意什么:国仁楠哥
- maven配置SSM框架整合 其中包括maven在使用过程中遇到的问题
- my_RIO实现小车避障
- 中电科45家研究所:北上第一梯队,南京、成都、合肥和重庆第二梯队
热门文章
- Uva_156 Ananagrams ( map 的应用 )
- 心形函数的正确打开方式(Unity3D Shader)
- [20130827]A Short History of Nearly Everything[serial]
- 必须了解的网络运维知识
- 有一张厚度为0.1mm的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可达(再对折一次就超过)珠穆朗玛峰的高度?(C语言)
- webstorm加载webpack
- 基于html人事管理报告,人事管理工作实习报告范文
- 上古卷轴5捏脸php导入,上古卷轴5捏脸预设导入 上古卷轴5捏脸预设怎么导入
- 解决荣耀magicbook Linux版 无线网卡驱动安装不上的问题
- Java url链接生成二维码