文档章节

C++开源日志库log4cplus

j
 jmppok
发布于 2015/03/25 10:14
字数 908
阅读 156
收藏 0

转载请文章注明出处: http://blog.csdn.net/jmppok/article/details/17357073

1.日志的重要性

随着计算机技术的进步和发展,计算的重心开始由客户端向服务端转移,出现了诸如面向服务、并行计算、云计算等应用模式,后台服务端开始承担越来越来的工作,运行的应用程序也越来越复杂。而作为后台服务端应用,我们必须通过某种方式对其运行状况进行监控,以便在出现问题时能更好的跟踪和定位。这就需要一个给力的日志系统。可以说日志系统在当前的服务端应用中已成为一个必不可少的重要模块。


2.大名鼎鼎的Log4j

说起日志系统,不得不提大名鼎鼎的Log4j,特别是使用Java的人们,可以说是无人不知无人不晓无人不用。Log4j以其简单的使用方式(引入一个jar包,一行代码即可调用),灵活(可通过配置文件随意配置),功能强大(多个级别,可配置多个输出目的地,Console,File,系统日志,远端的LogServer等等,可订制日志格式,自动产生,删除日志文件)等等等等特性,一直是Java日志系统的首选。


3.Log4j的C++版本Log4cplus

上面说到,日志在现在的系统里必不可少,Java有功能强大的Log4j可以使用,作为最重要变成语言之一的C++有什么选择呢?

幸运的是,有一些大牛很早之前就发现了这个问题,他们仿照Log4J,使用C++语言开发了一套日志系统Log4cplus,Log4cplus的目的很明确,打造C++版的Log4j。而且最重要的是Log4cplus是开源的。

4.使用简介

1)下载http://sourceforge.net/projects/log4cplus/

2)Log4j是一个C++库,编译以后即可使用。同时log4cplus支持windows和linux:

      windows下:打开根目录下的msvc10下面的vs工程,编译即可。

      Linux下:configure, make

3)使用

   a)最简单的使用方式

#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <iomanip>

using namespace log4cplus;

int
main()
{
    BasicConfigurator config;
    config.configure();

    Logger logger = Logger::getInstance("main");
    LOG4CPLUS_WARN(logger, "Hello, World!");
    return ;
}

b)可编程方式

/*    严格实现步骤1-6,appender输出到屏幕, 其中的布局格式和LogLevel后面会详细解释。*/
    #include <log4cplus logger.h=""></log4cplus>
    #include <log4cplus consoleappender.h=""></log4cplus>
    #include <log4cplus layout.h=""></log4cplus>   
    using namespace log4cplus;
    using namespace log4cplus::helpers;   
    int main(){
        /* step 1: Instantiate an appender object */    
        SharedObjectPtr _append (new ConsoleAppender());    
        _append->setName("append for test");   
        /* step 2: Instantiate a layout object */    
        std::string pattern = "%d{%m/%d/%y %H:%M:%S}  - %m [%l]%n";    
        std::auto_ptr _layout(new PatternLayout(pattern));   
        /* step 3: Attach the layout object to the appender */    
        _append->setLayout( _layout );   
        /* step 4: Instantiate a logger object */    
        Logger _logger = Logger::getInstance("test");   
        /* step 5: Attach the appender object to the logger  */   
        _logger.addAppender(_append);   
        /* step 6: Set a priority for the logger  */    
        _logger.setLogLevel(ALL_LOG_LEVEL);   
         /* log activity */    
        LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...")    
       sleep(1);    
       LOG4CPLUS_WARN(_logger, "This is the SECOND log message...")   
       return 0;
    }


4)配置

Log4cplus配置基本与log4J相同。下面是一个例子

log4cplus.rootLogger=DEBUG, STDOUT, ALL_MSGS


log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
#log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n
log4cplus.appender.STDOUT.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n


#设置日志追加到文件尾
log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender  

#设置日志文件大小
log4cplus.appender.ALL_MSGS.MaxFileSize=100MB

#设置生成日志最大个数
log4cplus.appender.ALL_MSGS.MaxBackupIndex=10

#设置输出日志路径
log4cplus.appender.ALL_MSGS.File=log/test.log
log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout
#设置日志打印格式
#log4cplus.appender.ALL_MSGS.layout.ConversionPattern=|%D:%d{%Q}|%p|%t|%l|%m|%n
log4cplus.appender.ALL_MSGS.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n
#匹配相同日志级别,只有debug日志才输入到该文件中
#log4cplus.appender.ALL_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter
#log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelToMatch=DEBUG
#log4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=true
#log4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter

  

本文转载自:http://blog.csdn.net/jmppok/article/details/17357073

j

jmppok

粉丝 10
博文 138
码字总数 0
作品 2
海淀
高级程序员
私信 提问
C++开源日志库:log4cplus

说起日志系统,不得不提大名鼎鼎的Log4j,特别是使用Java的人们,可以说是无人不知无人不晓无人不用。Log4j以其简单的使用方式(引入一个jar包,一行代码即可调用),灵活(可通过配置文件随...

shezjl
2015/07/06
432
0
C++日志库log4cplus:SocketAppender记录日志到log Server

转载请注明出处:http://blog.csdn.net/jmppok/article/details/17375057 1.问题 C++程序在后台运行时,可通过log4cplus记录日志。当C++程序运行在远程服务器上时,我们就需要远程登陆到该服...

jmppok
2015/03/25
523
0
log4plus编译之ios

$ ./configure --prefix=/Users/admin/Desktop/库的编译/log4cplus-1.0.4/build/armv6 -host= i386-apple-darwin -disable-shared -enable-static -build=x86_64-apple-darwin10.8.0 CC=/App......

叶叶叶
2014/02/17
646
0
log4cplus 1.1.0 RC1 发布

log4cplus 1.1.0 RC1 发布,新增 AsyncAppender 一个简单支持多进程同时记录日志到一个统一文件的功能,改进了 MDC (%X), 线程标识 (%T), 函数名 (%M), wchar_t <-> 字符转换, DeviceAppende...

红薯
2012/03/13
632
0
基于LGPL开源项目 Log4cpp安装与使用

  【IT168 专稿】Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文...

作者:王学斌
2011/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

免费又实用的PDF编辑器,让你始终快人一步!

没有一份文件是一出手就完美无缺的,必然经历了“初稿”、“二改”、“三改”、“终稿”、“再也不改”,等等一系列过程,每次上交都要转化成PDF格式,不仅麻烦、浪费时间而且看得令人眼花缭...

秃驴敢跟老衲抢方丈
29分钟前
107
0
Scala 系列教程(二):安装

Scala 安装 Scala 语言可以运行在Window、Linux、Unix、 Mac OS X等系统上。 Scala是基于java之上,大量使用java的类库和变量,使用 Scala 之前必须先安装 Java(>1.5版本)。 Mac OS X 和 ...

kylin_ink
37分钟前
107
0
45亿数据迁移记录后续-日数据量千万级别到clickhouse

45亿数据迁移记录后续-日数据量千万级别到clickhouse 相关文档地址 flume 参考地址 waterdrop 参考地址 clickhouse 参考地址 kafka 参考地址 环境 日志在一个服务器,clickhouse集群在另一个...

夜中孤影
38分钟前
245
0
PCB设计经验,不得不说的一些技巧,知识福利满满啊!

不得不说的设计经验 如果设计的电路系统中包含FPGA器件,则在绘制原理图前必需使用Quartus II软件对管脚分配进行验证。(FPGA中某些特殊的管脚是不能用作普通IO的) 4层板从上到下依次为:信...

demyar
41分钟前
102
0
myqsl 实战学习(一)

myqsl 实战学习(一) mysql逻辑架构图 mysql 总体分为Server层和存储引擎层 Server层 连接器、查询缓存、分析器、优化器、执行器等 存储引擎层 负责数据的存储和提取。InnoDB、MyISAM、Mem...

旺仔没馒头
43分钟前
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部