Poco Logger demo

本文展示了一个使用Poco库进行多线程日志记录的C++示例,通过创建多个线程并发写入日志,演示了Poco Logger组件的功能和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//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

 

 

转载于:https://www.cnblogs.com/Leo-Forest/archive/2013/01/10/2855291.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值