log4cplus

原创 2012年03月27日 19:16:55

1,向文件中输出日志

#include <log4cplus/logger.h>

#include <log4cplus/fileappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/ndc.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>


using namespace log4cplus;


const int LOOP_COUNT = 1000000;


int main()
{
    // RollingFileAppender and TTCCLayout
    SharedAppenderPtr append1(
        new RollingFileAppender(LOG4CPLUS_TEXT("test1.log"), 5*1024, 5)); // 系统要求的最低大小为200k,这里设置的是5k,系统会自动调整为200k
    append1->setName(LOG4CPLUS_TEXT("1"));
    append1->setLayout(std::auto_ptr<Layout>(new TTCCLayout()));


    // FileAppender and SimpleLayout
    SharedAppenderPtr append2(
        new FileAppender(LOG4CPLUS_TEXT("test2.log"))); // 文件大小无止境?
    append2->setName(LOG4CPLUS_TEXT("2"));
    append2->setLayout(std::auto_ptr<Layout>(new SimpleLayout()));


    /* DailyRollingFileAppender(不止是daily,也可以是
    MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每两天)、
    HOURLY(每时)、MINUTELY(每分)) and PatternLayout。*/
    SharedAppenderPtr append3(
        new DailyRollingFileAppender(LOG4CPLUS_TEXT("test3.log"), DAILY, true, 10));
    append3->setName(LOG4CPLUS_TEXT("3"));


    std::string pattern = "[%D{%Y-%m-%d %H:%M:%S %q}] [%-5p] <%l %M> %m%n";
    append3->setLayout(std::auto_ptr<Layout>(new PatternLayout(pattern)));


    Logger root = Logger::getRoot();
    root.setLogLevel(ALL_LOG_LEVEL); // 输出所有级别的日志
    Logger logger1 = Logger::getInstance(LOG4CPLUS_TEXT("test1"));
    Logger logger2 = Logger::getInstance(LOG4CPLUS_TEXT("test2"));
    Logger logger3 = Logger::getInstance(LOG4CPLUS_TEXT("test3"));


    logger1.addAppender(append1);
    logger2.addAppender(append2);
    logger3.addAppender(append3);


    for (int i = 0; i < LOOP_COUNT; ++i) 
    {
        /*log4cplus中嵌入诊断上下文(Nested Diagnostic Context),即NDC。
        对log系统而言,
        当输入源可能不止一个,而只有一个输出时,往往需要分辩所有输出消息的来源,比如服务器处理来自不同
        客户端的消息时就需要作此判断,NDC可以为交错显示的信息打上一个标记(stamp), 使得辨认工作看起来
        容易些。这个标记是线程特有的,利用了线程局部存储机制,称为线程私有数据(Thread-specific
        Data,或TSD)。*/
        NDCContextCreator _context(LOG4CPLUS_TEXT("loop")); 
        
        LOG4CPLUS_DEBUG(logger1, "Entering loop #" << i);
        LOG4CPLUS_DEBUG(logger2, "Entering loop #" << i);
        LOG4CPLUS_DEBUG(logger3, "Entering loop #" << i);
    }


    // 从配置文件中获取logger、appender和layout
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("urconfig.properties"));
    Logger fileCat = Logger::getInstance(LOG4CPLUS_TEXT("filelogger"));


    for (int i = 0; i < LOOP_COUNT; ++i)
    {
        LOG4CPLUS_TRACE(fileCat, LOG4CPLUS_TEXT("This is a TRACE...") << i);
        LOG4CPLUS_DEBUG(fileCat, LOG4CPLUS_TEXT("This is a DEBUG...") << i);
        LOG4CPLUS_INFO(fileCat, LOG4CPLUS_TEXT("This is a INFO...") << i);
        LOG4CPLUS_WARN(fileCat, LOG4CPLUS_TEXT("This is a WARN...") << i);
        LOG4CPLUS_ERROR(fileCat, LOG4CPLUS_TEXT("This is a ERROR...") << i);
        LOG4CPLUS_FATAL(fileCat, LOG4CPLUS_TEXT("This is a FATAL...") << i);
    }


    /* 问题:DailyRollingFileAppender和RollingFileAppender不能同时使用,即一个appender不能既是
       DailyRollingFileAppender的又同时是RollingFileAppender的
    */


    return 0;
}


/*
g++ logdemo5.cpp -o demoxx -g -Wall -I /usr/local/include/ -L /usr/local/lib/ -llog4cplus
或者
g++ logdemo5.cpp -o demo1 -g -Wall -I /usr/local/include/ /usr/local/lib/liblog4cplus.a -lpthread

*/


// urconfig.properties文件

log4cplus.logger.filelogger=TRACE, append_1

log4cplus.appender.append_1=log4cplus::DailyRollingFileAppender
log4cplus.appender.append_1.Schedule=MINUTELY
log4cplus.appender.append_1.File=./log/test.log #目录要手动创建!
#log4cplus.appender.append_1.MaxFileSize=512000 #无效果
#log4cplus.appender.append_1.MaxBackupIndex=5   #貌似也无效果

log4cplus.appender.append_1.layout=log4cplus::PatternLayout
log4cplus.appender.append_1.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S %q}] [%-5p] <%l %M> %m%n


2,性能数据:



void performanceTest()
{
    #define LOOP_COUNT 100000
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));
    Logger root = Logger::getRoot();
    Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("testlogger"));
    
    LOG4CPLUS_WARN(Logger::getRoot (), "Starting test loop....");
    Time start = Time::gettimeofday();
    tstring msg(LOG4CPLUS_TEXT("This is a WARNING..."));
    
    int i = 0;
    for (i = 0; i < LOOP_COUNT; ++i)
    {
        LOG4CPLUS_WARN(logger, msg);
    }
    
    Time end = Time::gettimeofday();
    Time diff = end - start;
    
    LOG4CPLUS_WARN(LOG4CPLUS_TEXT("root"), "Logging " << LOOP_COUNT << " took: " << diff);
    LOG4CPLUS_WARN(root, "Logging average: " << (diff / LOOP_COUNT));
}


#log4cplus.properties配置文件
log4cplus.rootLogger=TRACE, STDOUT 
log4cplus.logger.testlogger=TRACE, TEST
log4cplus.additivity.testlogger=FALSE


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 - %m %n


log4cplus.appender.TEST=log4cplus::FileAppender
log4cplus.appender.TEST.File=test_output.log
log4cplus.appender.TEST.layout=log4cplus::PatternLayout
log4cplus.appender.TEST.layout.ConversionPattern=%d{%y-%m-%d %H:%M:%S,%q} [%t] %-5p %c <%x> - %m%n


// 程序输出
03/28/12 01:58:35 [3078437120] WARN  root - Starting test loop.... 
03/28/12 01:58:38 [3078437120] WARN  root - Logging 100000 took: 2sec 459840usec
03/28/12 01:58:38 [3078437120] WARN  root - Logging average: 0sec 24usec -- 向文件中打印每条日志平均需要24微妙


test_output.log日志文件的内容:
12-03-28 01:57:29,677 [3078301952] WARN  testlogger <> - This is a WARNING...
...


log4cplus-1.0.2-docs.tar.gz

  • 2013年04月08日 07:55
  • 858KB
  • 下载

log4cplus-0.9.1-docs.tar.gz

  • 2013年03月25日 01:05
  • 306KB
  • 下载

log4cplus的使用

一.简介    log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2005中使用该日志库。 二.下载    可从网站http://log4cplus.so...
  • Augusdi
  • Augusdi
  • 2013年05月29日 15:10
  • 27176

log4cplus-0.9.2-docs.tar.gz

  • 2013年03月27日 00:29
  • 381KB
  • 下载

log4cplus-1.1.3

  • 2014年01月10日 17:07
  • 425KB
  • 下载

log4cplus的安装与使用初步

1. 简介 log4cplus是C++编写的开源的日志系统,The purpose of this project is to port the excellentLog for Java ...

log4cplus1.0.4

  • 2010年04月03日 14:56
  • 393KB
  • 下载

log4cplus小做修改

  • 2010年04月27日 04:09
  • 11KB
  • 下载

Log4Cplus在Linux下的安装及使用

在做服务器程序的过程中我想最有用的调试手段应该是日志系统了,好的日志能够直观快速的定位程序的问题,如系统崩溃,死锁,错误的异常抛出等。如何选择一个好的日志库对程序员来说至关重要。设计简陋粗糙的日志系统...

log4cplus文档

  • 2012年11月25日 21:31
  • 1.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:log4cplus
举报原因:
原因补充:

(最多只允许输入30个字)