C++開源日志庫:log4cplus

jopen 11年前發布 | 114K 次閱讀 log4cplus 日志處理

說起日志系統,不得不提大名鼎鼎的Log4j,特別是使用Java的人們,可以說是無人不知無人不曉無人不用。Log4j以其簡單的使用方式(引入一個jar包,一行代碼即可調用),靈活(可通過配置文件隨意配置),功能強大(多個級別,可配置多個輸出目的地,Console,File,系統日志,遠端的LogServer等等,可訂制日志格式,自動產生,刪除日志文件)等等等等特性,一直是Java日志系統的首選。

 

1.Log4j的C++版本Log4cplus

上面說到,日志在現在的系統里必不可少,Java有功能強大的Log4j可以使用,作為最重要變成語言之一的C++有什么選擇呢?

幸運的是,有一些大牛很早之前就發現了這個問題,他們仿照Log4J,使用C++語言開發了一套日志系統Log4cplus,Log4cplus的目的很明確,打造C++版的Log4j。而且最重要的是Log4cplus是開源的。

2.使用簡介

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  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!