多线程Poco::Logger生成日志

日志函数在多线程的环境下应该可以进行同步处理,多个线程同时向同一个日志文件进行日志输出时,每一次的日志记录应保持完整,即日志功能实现了同步处理。下面的例子采用Poco的多线程编程,每次启动200个子线程,各个子线程函数负责向日志文件中写入自己的日志内容。

包含文件和命名空间

#include "Poco/Thread.h"
#include "Poco/Runnable.h"
using Poco::Thread;
using Poco::Runnable;

 

#include "Poco/Thread.h"
#include "Poco/Runnable.h"
using Poco::Thread;
using Poco::Runnable;

 

多线程控制代码,采用Poco::Thread

void ThreadDemo() { //创建日志 Logger& logTest = Logger::get("TestLogger"); AutoPtr pChannel(new ConsoleChannel); logTest.setLevel(Poco::Message::PRIO_DEBUG); logTest.setChannel(pChannel); #define TRD_NUM 200 Thread trd[TRD_NUM]; Worker worker[TRD_NUM]; //启动TRD_NUM个线程 for (int i = 0; i < TRD_NUM;i++) { worker[i].setLogger(logTest); trd[i].start(worker[i]); } //等待所有的线程结束 for (int i= 0; i < TRD_NUM;i++) { trd[i].join(); } #undef TRD_NUM }

子线程采用Poco::Runnable,并通过Logger向日志文件写入文本

//线程函数 class Worker : public Runnable { public: void run() { Message msg; PatternFormatter fmt; string result; msg.setSource("Worker"); fmt.setProperty("pattern","[%Y-%m-%d %H:%M:%S %N:%P:%s:%I]-%t"); fmt.format(msg,result); result += "run function"; m_pLog->information(result); } void setLogger(Logger& logger) { m_pLog = &logger; } private: Logger* m_pLog; };  

你可能感兴趣的:(程序设计,C/C++)