Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3110611
  • 博文数量: 396
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4209
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-04 13:04
文章分类

全部博文(396)

文章存档

2022年(1)

2021年(2)

2020年(8)

2019年(24)

2018年(135)

2017年(158)

2016年(68)

我的朋友

分类: LINUX

2017-08-17 13:16:45

在做服务器程序的过程中我想最有用的调试手段应该是日志系统了,好的日志能够直观快速的定位程序的问题,如系统崩溃,死锁,错误的异常抛出等。如何 选择一个好的日志库对程序员来说至关重要。设计简陋粗糙的日志系统,可能会到导致系统的性能随着日志的增加而线性的降低,还可能导致线程安全型等问题,我 在项目中用到了log4cplus这个日志库,log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的。 log4cplus是C++编写的开源的日志系统,前身是编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。

Log4cplus在下的安装:

1.      配置  ./ configure--prefix=/usr

2.      编译  make

3.      安装  make intsall

--prefix 是指定安装目录,默认会从/usr/include下寻找头文件,在/usr/lib目录寻找库文件。

   Log4cplus移植到ARM:

   首先你需要安装并导出一个交叉编译环境,然后查看你的交叉编译环境默认的库的安装目录,在终端输入命令:echo 'main(){}'|arm-none-linux-gnueabi-gcc -E -v –

查看默认的安装目录。

1.    配置sudo ./configure --prefix=yourinstall path  --host=arm-linux

2.    修改Makefile将Makefile中的所有的与编译相关的编译链工具都改成交叉编译工具,这其中包括:ar ,as ,ld ,gcc ,g++,rannlib

3.    编译 make

4.    安装 make install

 

Log4Cplus的使用基本步骤:

1.      实现了一个封装了输出介质的appender对象

2.      实例化一个封装了输出格式的Layout对象

3.      将Layout对象绑定(attach)到appender

4.      获得Logger对象

5.      将append绑定到Logger

6.      设置Logger的日志等级

7.      打印日志

例子程序:

  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9. #include   
  10. #include   
  11. #include   
  12. #include   
  13. #include   
  14. using namespace std;  
  15. using namespace log4cplus;  
  16. using namespace std;  
  17. int main()  
  18. {  
  19.     SharedAppenderPtr appendPtr(new RollingFileAppender("log_text.txt",1*1024*1024,1,true));  
  20.     Logger logger = Logger::getInstance("test");  
  21.     std::string pattern = "%p-%d{%y/%m/%d %H:%M:%S-%Q}{ThreadID:%t} ->%m\r\n";  
  22.     std::auto_ptr layout_(new PatternLayout(pattern));  
  23.     appendPtr->setLayout(layout_);  
  24.     logger.addAppender(appendPtr);  
  25.     logger.setLogLevel(ALL_LOG_LEVEL);  
  26.     LOG4CPLUS_INFO(logger,"Info message");  
  27.     LOG4CPLUS_DEBUG(logger,"Debug message");  
  28.     LOG4CPLUS_TRACE(logger,"Trace message");  
  29.     LOG4CPLUS_ERROR(logger,"Error message");  
  30.     LOG4CPLUS_WARN(logger,"Warning message");  
  31.     LOG4CPLUS_FATAL(logger,"fatal message");  
  32.     return 0;  
  33. }  

 这是一个简单的例子,更为具体的使用方式可以去查阅更详细的资料:如:

Log4cplus日志库的有点很明显,不会随着日志数量的增加而增加系统的负担,而且不用担心线程安全等其他的问题
阅读(4854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~