游戏开发,系统架构; 博客迁移到:http://www.jianshu.com/u/3ac0504b3b8c
全部博文(198)
分类: C/C++
2011-12-05 11:32:03
前言:
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提供了一个对比表。
log4j日志系统由三大类组成,它们又各自派生出不同功能的子类:
这里给出一个最常用的例子,就是按日期生成日志,但是代码异常简单。
#include虽然C++代码可以写的很简单,但是我们可以进行很复杂的配置,让log4cxx灵活的记录信息,比如上边指定了配置文件/etc/log4cxx.properties,这是一个Java特性文件:
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有以下几种:
Layout的语法:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class其中,Log4j提供的Layout有以下几种:
Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
转载地址:http://saupb.blog.163.com/blog/static/4712417820112951932781/