
前段时间的一个C#项目我用了log4net,感觉不错。最近开了个新坑,对于服务器来说,日志是必不可少的组件,当然不仅仅是服务端程序,在大多数客户端程序上也需要用日志来记录用户的一些行为以及操作过程。除了为.net准备的log4net之外,类似的开源日志库其实还有log4j, log4cxx, log4cpp,log4cplus, glog等,还有为C语言准备的log4c,为python准备的log4p,以及最原始的log4j。对于C++系列的几个,估计有人会困扰应该选哪个,因此我在这里做一个归纳:
log4cxx:Apache的产品,属于apache的子项目之一,由log4j移植过来的。移植过来的东西多数都有一个特点,那就是要依赖各种碗糕。log4cxx就需要依赖apr-utils,编译起来没那么直接,因此我放弃了它。
log4cpp:感觉上log4cpp和log4cplus大同小异,支持的功能也类似。上上一次更新是在2007年,不过在时隔五年之后的去年年底(2012年),它突然又更新了, 从1.0版提升到了1.1版,有点不容易,感觉诈尸了。另外,它也是由log4j移植过来的。
log4cplus:log4cplus究竟和log4cpp区别在哪,如果一定要作对比似乎log4cplus比log4cpp复杂了那么一点点。log4cplus的功能比log4cpp支持的功能更加全面,支持线程安全(log4cpp的代码里也做了一些对线程安全的保证,但官方没有介绍它支持线程安全,反而log4cplus宣称自己是线程安全的),另外log4plus更新非常频繁,对于一个有版本洁癖的人来说,这也是我选择它的原因,新版本提供了vc10的解决方案,还支持可选编译Unicode和非Unicode版本。
glog:这个就不介绍了,全称Google Glog, Google的东西一直比较让人放心。它比log4系列的库都要简单,不过它不支持用配置文件控制日志行为,这对我来说是个遗憾。
log4系列的库前身都是log4j,log4j真是深藏功与名。以下通过log4plus来介绍一下它的基本用法和魅力。
log4cplus用了properties配置文件对日志行为进行配置,从java移植过来的东西,用properties文件作为配置不奇怪。它的格式基本上是key=value,一项占一行,以#号作为注释的开始。
我的新坑项目有客户端和服务端,当我们想为两边配置不同的日志输出格式时,就需要用到了log4plus提供的appender概念。在定义appender之前,需要先为client和server配置logger对象。完整的配置如下:
log4cplus.logger.SERVER_LOGGER=DEBUG, ServerAppender log4cplus.logger.CLIENT_LOGGER=DEBUG, ClientAppender #server appender configuration log4cplus.appender.ServerAppender=log4cplus::ConsoleAppender log4cplus.appender.ServerAppender.layout=log4cplus::PatternLayout log4cplus.appender.ServerAppender.layout.ConversionPattern=%d[%m/%d/%y %H:%M:%S] [%t] %-5p %c - %m %n #client appender configuration log4cplus.appender.ClientAppender=log4cplus::ConsoleAppender log4cplus.appender.ClientAppender.layout=log4cplus::PatternLayout log4cplus.appender.ClientAppender.layout.ConversionPattern=%d[%m/%d/%y %H:%M:%S] [%t] %-5p %c - %m %n
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29025-1.html
总局盯着小米电源查一段时间
卖武器就是他要达到的目的
经济下滑并不全是坏事