// log4cplus.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <log4cpp/Category.hh>#include <log4cpp/Appender.hh>#include "log4cpp/FileAppender.hh"#include <log4cpp/OstreamAppender.hh>#include "log4cpp/NTEventLogAppender.hh"#include <log4cpp/StringQueueAppender.hh>#include <log4cpp/RollingFileAppender.hh>//#include "log4cpp/SyslogAppender.hh"#include <log4cpp/Layout.hh>#include <log4cpp/BasicLayout.hh>#include <log4cpp/PatternLayout.hh>#include <log4cpp/BasicConfigurator.hh>#include <log4cpp/PropertyConfigurator.hh>#include <log4cpp/Priority.hh>#include <log4cpp/NDC.hh>#include <string>#include <queue>using namespace std;using namespace log4cpp;#pragma comment(lib,".\\Result\\log4cpp.lib") void TestFileAppender();void TestOstreamAppender();void TestSyslogAppender();void Ndc();void TestNTEventAppender();void TestPatternLayout();void TestPropConfig();void TestStringQueue();void TestRollingFile();int _tmain(int argc, _TCHAR* argv[]){ TestFileAppender(); TestOstreamAppender(); //TestSyslogAppender(); //#include <syslog.h> 不存在 Ndc(); TestNTEventAppender(); TestPatternLayout(); TestPropConfig(); TestStringQueue(); TestRollingFile(); system("puase"); return 0;}void testLogva(log4cpp::Category& category,log4cpp::Priority::Value priority, const char* stringFormat,...){ va_list va; va_start(va, stringFormat); category.logva(priority, stringFormat, va); va_end(va);}void TestFileAppender(){ log4cpp::Appender* appender = new log4cpp::FileAppender("default", "fileappender.log"); log4cpp::Layout* layout = new log4cpp::BasicLayout(); appender->setLayout(layout); log4cpp::Category& root = log4cpp::Category::getRoot(); root.addAppender(appender); root.setPriority(log4cpp::Priority::INFO); root.log(log4cpp::Priority::INFO, "reopen log"); if (appender->reopen()) //reopenAll() { root.info("log reopened"); } else { root.warn("could not reopen log"); } root.log(log4cpp::Priority::ERROR, "reopen log"); if (appender->reopen()) //reopenAll() { root.info("log reopened"); } else { root.warn("could not reopen log"); } log4cpp::Category::shutdown();}void TestOstreamAppender(){ log4cpp::Appender* appender = new log4cpp::OstreamAppender("appender", &std::cout); log4cpp::Layout* layout = new log4cpp::BasicLayout(); appender->setLayout(layout); log4cpp::Category& root = log4cpp::Category::getRoot(); root.setPriority(log4cpp::Priority::ERROR); root.removeAllAppenders(); root.addAppender(appender); root.error("root error #1"); root.warn("root error #2"); //不能被输出 log4cpp::Appender* subappender = new log4cpp::OstreamAppender("appender", &std::cout); log4cpp::Category& sub = log4cpp::Category::getInstance(std::string("sub1")); sub.addAppender(subappender); sub.error("root error #3"); //输出两次 std::cout<<(root.getAppender() == appender)<<std::endl; std::cout<<(root.getAppender() == subappender)<<std::endl; root.removeAllAppenders(); sub.removeAllAppenders(); root.error("root error #4"); //不能被输出 sub.error("root error #5"); //不能被输出 std::cout<<(root.getAppender() == subappender)<<std::endl; //root.addAppender(appender); //直接中断错误 root.error("root error #6"); //不能被显示 root.removeAllAppenders(); appender = new log4cpp::OstreamAppender("appender", &std::cout); root.addAppender(appender); root.error("root error #6"); subappender = new log4cpp::OstreamAppender("appender", &std::cout); sub.addAppender(subappender); sub.setAdditivity(false); //false覆盖,true添加又一端口 sub.error("root error #7"); //只显示一次 std::cout << " root priority = " << root.getPriority() << std::endl; std::cout << " sub priority = " << sub.getPriority() << std::endl; sub.setPriority(log4cpp::Priority::INFO); std::cout << " root priority = " << root.getPriority() << std::endl; std::cout << " sub priority = " << sub.getPriority() << std::endl; testLogva(root, log4cpp::Priority::EMERG, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::ALERT, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::CRIT, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::ERROR, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::WARN, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::INFO, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::NOTICE, "This contains %d %s", 2, "variable arguments"); testLogva(root, log4cpp::Priority::DEBUG, "This contains %d %s", 2, "variable arguments"); sub.warn("sub2 warn"); sub.error("%s %s %d", "test", "vform", 123); sub.warnStream() << "streamed warn"; sub << log4cpp::Priority::WARN << "warn2.." << "..warn3..value=" << 0 << log4cpp::eol << "..warn4"; /*root.removeAllAppenders(); sub.removeAllAppenders();*/ std::vector<log4cpp::Category*>* allCats; std::vector<log4cpp::Category*>::const_iterator iter; allCats = log4cpp::Category::getCurrentCategories(); // remove all appenders from all categories for (iter = allCats->begin(); iter != allCats->end(); iter++) { (*iter)->removeAllAppenders(); } log4cpp::Category::shutdown();}void TestSyslogAppender(){ /*log4cpp::SyslogAppender* syslogAppender; syslogAppender = new log4cpp::SyslogAppender("syslog", "log4cpp");*/ log4cpp::Appender*syslogAppender = new log4cpp::FileAppender("default", "fileappender"); syslogAppender->setLayout(new log4cpp::BasicLayout()); log4cpp::Category& root = log4cpp::Category::getRoot(); root.addAppender(syslogAppender); root.setPriority(log4cpp::Priority::ERROR); root.log(log4cpp::Priority::NOTICE, "reopen log"); if (log4cpp::Appender::reopenAll()) { root.info("log reopened"); } else { root.warn("could not reopen log"); } log4cpp::Category::shutdown();}void Ndc(){ std::cout << "1. empty NDC: " << NDC::get() << std::endl; NDC::push("context1"); std::cout << "2. push context1: " << NDC::get() << std::endl; NDC::push("context2"); std::cout << "3. push context2: " << NDC::get() << std::endl; NDC::push("context3"); std::cout << "4. push context3: " << NDC::get() << std::endl; std::cout << "5. get depth: " << NDC::getDepth() << std::endl; std::cout << "6. pop: " << NDC::pop() << std::endl; NDC::clear(); std::cout << "7. clear: " << NDC::get() << std::endl; for(int i = 0; i < 100; i++) { char ndc2[20]; sprintf(ndc2, "i=%d", i); log4cpp::NDC::push(ndc2); std::cout << i<<" : " << NDC::get() << std::endl; log4cpp::NDC::pop(); } log4cpp::Category::shutdown();}void TestNTEventAppender(){ log4cpp::Appender* appender = new log4cpp::NTEventLogAppender("default", "testNTEventAppender.Log"); log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1")); sub1.addAppender(appender); sub1.setPriority(log4cpp::Priority::DEBUG); sub1.emerg("sub1 emerg"); sub1.fatal("sub1 fatal"); sub1.alert("sub1 alert"); sub1.crit("sub1 crit"); sub1.error("sub1 error"); sub1.warn("sub1 warn"); sub1.notice("sub1 notice"); sub1.info("sub1 info"); sub1.debug("sub1 debug"); sub1.log(log4cpp::Priority::NOTSET, "sub1 notset"); sub1.log(log4cpp::Priority::ERROR, "sub1 error"); log4cpp::Category::shutdown();}void TestPatternLayout(){ /*log4cpp::Appender* appender = new log4cpp::OstreamAppender("appender", &std::cout); log4cpp::PatternLayout* layout = new log4cpp::PatternLayout(); appender->setLayout(layout); log4cpp::Category& root = log4cpp::Category::getRoot(); root.addAppender(appender);*/ log4cpp::BasicConfigurator::configure(); //初始化 log4cpp::PatternLayout* layout = new log4cpp::PatternLayout(); layout->setConversionPattern("%d: %p %c %x: %m%n"); log4cpp::Category::getRoot().getAppender()->setLayout(layout); log4cpp::Category& root = log4cpp::Category::getRoot(); log4cpp::NDC::push("ndc1"); root.error("message"); std::string format = "%% %r %c:%d (%R / %r) [%p] %x %m %% (%u) %n"; layout->setConversionPattern(format); root.error("message"); // test date format format = "%d{%d %b %Y %H:%M:%S.%l} %m %n"; layout->setConversionPattern(format); root.error("message"); format = "%d{%d %b %Y %H:%M:%S.%l"; layout->setConversionPattern(format); root.error("message"); format = "%d%n"; layout->setConversionPattern(format); root.error("message"); format = "%.32m %d%n"; layout->setConversionPattern(format); int i; for (i = 0; i < 10; i++) { root.error("%d message", i); } format = "2m %d{%H:%M:%S.%l %d %b %Y}%n"; layout->setConversionPattern(format); for (i = 0; i < 10; i++) { root.error("%d message", i); }}void TestPropConfig(){ std::string initFileName; initFileName = ".\\include\\tests\\log4cpp.nt.property"; log4cpp::PropertyConfigurator::configure(initFileName); log4cpp::Category& root = log4cpp::Category::getRoot(); log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1")); log4cpp::Category& sub2 = log4cpp::Category::getInstance(std::string("sub1.sub2")); root.error("root error"); root.warn("root warn"); sub1.error("sub1 error"); sub1.warn("sub1 warn"); // the following 2 should only be in A1, not A2 sub1.info("sub1 info"); sub1.debug("sub1 debug"); // do a few so that the log rolls over sub2.warn("sub2 warn 1"); sub2.warn("sub2 warn 2"); sub2.warn("sub2 warn 3"); sub2.warn("sub2 warn 4"); sub2.warn("sub2 warn 5"); sub2.warn("sub2 warn 6"); sub2.warn("sub2 warn 7");#if defined(WIN32) log4cpp::Category& nt = log4cpp::Category::getInstance(std::string("subNT")); nt.error("subNT error"); nt.warn("subNT warn"); nt.debug("subNT debug");#endif log4cpp::Category::shutdown();}void TestStringQueue(){ log4cpp::StringQueueAppender* strQAppender = new log4cpp::StringQueueAppender("strQAppender"); strQAppender->setLayout(new log4cpp::BasicLayout()); log4cpp::Category& root = log4cpp::Category::getRoot(); root.addAppender(strQAppender); root.setPriority(log4cpp::Priority::DEBUG); root.error("Hello log4cpp in a Error Message!"); root.warn("Hello log4cpp in a Warning Message!"); cout<<"Get message from Memory Queue!"<<endl; cout<<"-------------------------------------------"<<endl; queue<string>& myStrQ = strQAppender->getQueue(); while(!myStrQ.empty()) { cout<<myStrQ.front(); myStrQ.pop(); }}void TestRollingFile(){ log4cpp::PatternLayout* pLayout1 = new log4cpp::PatternLayout(); pLayout1->setConversionPattern("%d: %p %c %x: %m%n"); log4cpp::PatternLayout* pLayout2 = new log4cpp::PatternLayout(); pLayout2->setConversionPattern("%d: %p %c %x: %m%n"); log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender","wxb.log"); fileAppender->setLayout(pLayout1); log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender( "rollfileAppender","rollwxb.log",5*1024,1); rollfileAppender->setLayout(pLayout2); log4cpp::Category& root = log4cpp::Category::getRoot().getInstance("RootName"); root.addAppender(fileAppender); root.addAppender(rollfileAppender); root.setPriority(log4cpp::Priority::DEBUG); for (int i = 0; i < 100; i++) { string strError; ostringstream oss; oss<<i<<":Root Error Message!"; strError = oss.str(); root.error(strError); } log4cpp::Category::shutdown();}/*# property configurator test filelog4cpp.rootCategory=DEBUG, rootAppenderlog4cpp.category.sub1=DEBUG, A1, A2log4cpp.category.sub1.sub2=DEBUG, A3log4cpp.appender.rootAppender=ConsoleAppenderlog4cpp.appender.rootAppender.layout=BasicLayoutlog4cpp.appender.A1=FileAppenderlog4cpp.appender.A1.fileName=A1.loglog4cpp.appender.A1.layout=PatternLayoutlog4cpp.appender.A1.layout.ConversionPattern=The message %m at time %d%nlog4cpp.appender.A2=FileAppenderlog4cpp.appender.A2.threshold=WARNlog4cpp.appender.A2.fileName=A2.loglog4cpp.appender.A2.layout=PatternLayoutlog4cpp.appender.A2.layout.ConversionPattern=The message %m at time %d%nlog4cpp.appender.A3=RollingFileAppenderlog4cpp.appender.A3.fileName=A3.loglog4cpp.appender.A3.maxFileSize=80log4cpp.appender.A3.maxBackupIndex=1log4cpp.appender.A3.layout=PatternLayoutlog4cpp.appender.A3.layout.ConversionPattern=The message %m at time %d{%H:%M}%nlog4cpp.category.subNT=INFO, subNTlog4cpp.appender.subNT=NTEventLogAppenderlog4cpp.appender.subNT.source=log4cpp-test*//* log4cpp::FileAppender // 输出到文件 log4cpp::RollingFileAppender // 输出到回卷文件,即当文件到达某个大小后回卷 log4cpp::OstreamAppender // 输出到一个ostream类 log4cpp::StringQueueAppender // 内存队列 log4cpp::Win32DebugAppender // 发送到缺省系统调试器 log4cpp::NTEventLogAppender // 发送到win 事件日志*/
转载于:https://www.cnblogs.com/shenchao/p/3261087.html
相关资源:JAVA上百实例源码以及开源项目