log4cpp测试

57 篇文章 1 订阅
16 篇文章 0 订阅

configure请加入–with-pthreads 或者–with-omnithreads选项。Win版本已经加入对MS线程的支持。


#include <stdio.h>  
#include <time.h>    
#include <iostream>
#include <boost/circular_buffer.hpp> 
#include <thread>
#include <mutex>
#include <vector>

#include <stdio.h>
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/SimpleLayout.hh>
#include "log4cpp/PropertyConfigurator.hh"


using namespace std;
std::mutex g_mutex;  // protects g_i
// 1. circular_buffer 在多线程下是否需要加锁
//    ---- thread1 write
//    ---- thread2 read
//    ---- thread3 write


boost::circular_buffer<int> cb(3);

void thread1_foo()
{
    int i = 0;
    while(i++ < 1000)
    {
        cb.push_back(i);
        {
            lock_guard<std::mutex> lock(g_mutex);
            cout << "thread1 write: " << i << endl;
        }
    }
}

void log_test()
{

    try
    {
        log4cpp::PropertyConfigurator::configure("./log4cpp.conf");
    }
    catch (log4cpp::ConfigureFailure& f)
    {
        std::cout << "Configure Problem " << f.what() << std::endl;

    }


    log4cpp::Category& root = log4cpp::Category::getRoot();
    log4cpp::Category& sub3 = log4cpp::Category::getInstance(std::string("sub3"));

    for(int i = 0; i < 100; i++)
    {
        sub3.fatal("some test");
    }

}

void thread2_foo()
{
    int i = 0;
    while(i++ < 2000)
    {
        if(cb.empty())
        {
            continue;
        }

        int a = cb[0];
        cb.pop_front();

        {

            lock_guard<std::mutex> lock(g_mutex);
            cout<< "thread2 read : "<< a << endl;
        }
    }
}




#define LOGFILE "./test.log"

int main() {
    /*Setting up Appender, layout and Category*/
//    log4cpp::Appender *appender = new log4cpp::FileAppender("FileAppender",LOGFILE);//第一个参数是appender的名字,第二个是log文件的名字
//    log4cpp::Layout *layout = new log4cpp::SimpleLayout();
//    //log4cpp::Layout *layout = new log4cpp::BasicLayout();
//    log4cpp::Category& category = log4cpp::Category::getInstance("abc");
//    
//    appender->setLayout(layout);
//    category.setAppender(appender);
//    category.setPriority(log4cpp::Priority::INFO);
//    
//    /*The actual logging*/
//    category.info("This is for tracing the flow");
//    category.notice("This is to notify certain events");
//    category.warn("This is to generate certain warnings");
    log_test();
    return 0;
}


g++ -std=c++11 -I/usr/local/include  -I/users/jiangxf/3rdParty/boost  -o log_test log_test.cpp liblog4cpp.a
# 定义了3个category sub1, sub2, sub3
# 其中sub2和sub3设置了additivity属性为false;sub1的additivity属性默认为true
rootCategory=DEBUG, rootAppender

category.sub1=,A1

category.sub2=INFO, A2
additivity.sub2=false

category.sub3=ERROR, A3
additivity.sub3=false


# 定义rootAppender类型和layout属性,这里使用了BasicLayout
appender.rootAppender=org.apache.log4cpp.ConsoleAppender
appender.rootAppender.layout=org.apache.log4cpp.BasicLayout

#定义A1的属性,  这里使用了  SimpleLayout
appender.A1=org.apache.log4cpp.FileAppender
appender.A1.fileName=./log/A1.log
appender.A1.layout=org.apache.log4cpp.SimpleLayout

#定义A2的属性,这里使用了  PatternLayout
appender.A2=org.apache.log4cpp.ConsoleAppender
appender.A2.layout=org.apache.log4cpp.PatternLayout
appender.A2.layout.ConversionPattern=The message '%m' at time %d%n

#定义A3的属性
#appender.A3=org.apache.log4cpp.RollingFileAppender
appender.A3=org.apache.log4cpp.ConsoleAppender
appender.A3.fileName=./log/A3.log
appender.A3.maxFileSize=50
appender.A3.maxBackupIndex=3
appender.A3.backupPattern=%Y-%m-%d
appender.A3.layout=org.apache.log4cpp.PatternLayout
#appender.A3.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} [%p]: [%c] %m%n
appender.A3.layout.ConversionPattern=%d,%p,%m%n
#%c sub3
#%p fatal
#%m 日志内容
#%n 回车换行



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值