Poco Logger demo
//PocoThreadLoggerTest.cpp #include <cstdlib> #include <iostream> #include <string> #include "Poco/Thread.h" #include "Poco/ThreadTarget.h" #include "Poco/Runnable.h" #include "Poco/Logger.h" #include "Poco/PatternFormatter.h" #include "Poco/FormattingChannel.h" #include "Poco/ConsoleChannel.h" #include "Poco/FileChannel.h" #include "Poco/Message.h" #include "Poco/Random.h" static Poco::Logger *pLogger; class MyRunnable : public Poco::Runnable { private: std::string _name; Poco::Random _rnd; public: void setName(std::string name) { _name = name; } void run() { for (int i=0; i<200; i++) { pLogger->debug("info from: " + _name); _rnd.seed(_rnd.next(65532) * _name.size()); Poco::Thread::sleep(_rnd.next(13) + 1); } } }; int main ( int argc, char *argv[] ) { Poco::Thread thr1, thr2, thr3; MyRunnable *pMyR1 = new MyRunnable(), *pMyR2 = new MyRunnable(), *pMyR3 = new MyRunnable(); pMyR1->setName("r1"); pMyR2->setName("ra2"); pMyR3->setName("runable3"); Poco::FormattingChannel *pFCFile = new Poco::FormattingChannel(new Poco::PatternFormatter("%Y-%m-%d %H:%M:%S.%c %N[%P]:%s: %q:%t")); pFCFile->setChannel(new Poco::FileChannel("test.log")); pFCFile->open(); pLogger = &(Poco::Logger::create("FileLogger", pFCFile, Poco::Message::PRIO_DEBUG)); thr1.start(*pMyR1); thr2.start(*pMyR2); thr3.start(*pMyR3); std::cout << "starting..." << std::endl; thr1.join(); thr2.join(); thr3.join(); std::cout << "end." << std::endl; return EXIT_SUCCESS; } /* ---------- end of function main ---------- */
编译:
[root@slayer tmp]# g++ PocoThreadLoggerTest.cpp -lPocoFoundation -o ptlt