Ejemplo n.º 1
0
 public function testLoggerMDC()
 {
     $logger = new Logger('testLogger');
     $layout = new LayoutSimple();
     $this->assertSame('testLogger [INFO] - test message' . PHP_EOL, $layout->formatMessage($logger, Logger::INFO, 'test message'));
     LoggerMDC::put('foo', 'bar');
     $this->assertSame('testLogger [INFO] foo=bar - test message' . PHP_EOL, $layout->formatMessage($logger, Logger::INFO, 'test message'));
     LoggerMDC::put('zip', 'tar');
     $this->assertSame('testLogger [INFO] foo=bar zip=tar - test message' . PHP_EOL, $layout->formatMessage($logger, Logger::INFO, 'test message'));
     LoggerMDC::remove('foo');
     $this->assertSame('testLogger [INFO] zip=tar - test message' . PHP_EOL, $layout->formatMessage($logger, Logger::INFO, 'test message'));
     LoggerMDC::remove('zip');
     $this->assertSame('testLogger [INFO] - test message' . PHP_EOL, $layout->formatMessage($logger, Logger::INFO, 'test message'));
 }
Ejemplo n.º 2
0
 /**
  * @dataProvider dataProviderFormatMessage
  *
  * @param boolean $isLogUserInfo
  * @param array $mdc
  * @param array $ndc
  * @param string $result
  */
 public function testFormatMessage($isLogUserInfo, array $mdc, array $ndc, $result)
 {
     LoggerMDC::clear();
     LoggerNDC::clear();
     foreach ($mdc as $key => $context) {
         LoggerMDC::put($key, $context);
     }
     foreach ($ndc as $context) {
         LoggerNDC::push($context);
     }
     /** @var \PHPUnit_Framework_MockObject_MockObject|MougrimLogger $logger */
     $logger = $this->getMockBuilder(MougrimLogger::class)->disableOriginalConstructor()->getMock();
     $logger->expects(static::any())->method('getName')->will(static::returnValue('name'));
     $layout = new Layout();
     $layout->setLogUserInfo($isLogUserInfo);
     $message = $layout->formatMessage($logger, MougrimLogger::INFO, 'message', new LayoutTestException());
     $datePrefixPattern = '/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} /';
     static::assertRegExp($datePrefixPattern, $message);
     $message = preg_replace($datePrefixPattern, 'datetime ', $message);
     static::assertSame($result, $message);
 }
Ejemplo n.º 3
0
 public function run()
 {
     $this->reinit();
     $processorPid = posix_getpid();
     $this->childrenInfo = [];
     try {
         Logger::getLogger('queue')->info('Begin');
         $this->beforeRun();
         $this->workersQty = 0;
         $this->freeWorkersNumbers = range(0, $this->maxWorkersQty - 1);
         $lastReinitTime = time();
         $waitPidAttemptQty = 0;
         while (true) {
             $this->getSignalHandler()->dispatch();
             if ($lastReinitTime + 15 < time()) {
                 $this->reinit();
                 $lastReinitTime = time();
             }
             $this->changeStatusFile();
             if ($this->workersQty) {
                 $this->processSignalChild();
             }
             if ($this->terminate) {
                 $this->terminate(array_keys($this->childrenInfo));
                 break;
             }
             if ($this->workersQty >= $this->maxWorkersQty) {
                 // логируем не на каждый шаг в цикле
                 if ($waitPidAttemptQty % 100 === 0) {
                     Logger::getLogger('queue')->debug('workersQty is max, wait');
                 }
                 usleep(10000);
                 ++$waitPidAttemptQty;
                 continue;
             }
             $waitPidAttemptQty = 0;
             if ($this->queuesEmpty($this->queues)) {
                 Logger::getLogger('queue')->info('Tasks not found, sleep');
                 usleep(2000000);
                 continue;
             }
             $queueNick = $this->getNextQueueNick();
             if ($queueNick === null) {
                 usleep(10000);
                 continue;
             }
             Logger::getLogger('queue')->debug("queue nick for next worker: {$queueNick}");
             $queue = $this->queues[$queueNick];
             $tasksForWorker = $queue->sliceTasksForWorker();
             Logger::getLogger('queue')->trace('Count tasks for worker: ' . count($tasksForWorker));
             $workerNumber = array_pop($this->freeWorkersNumbers);
             $pid = $this->fork();
             if ($pid) {
                 $this->childrenInfo[$pid] = ['workerNumber' => $workerNumber, 'queueNick' => $queueNick];
                 ++$this->workersQty;
                 ++$this->queuesInfo[$queueNick]['activeWorkersQty'];
                 Logger::getLogger('queue')->debug("worker running, workersQty={$this->workersQty},queue={$queueNick},activeWorkersQty={$this->queuesInfo[$queueNick]['activeWorkersQty']}");
             } else {
                 LoggerMDC::put('queueNick', $queueNick);
                 LoggerMDC::put('processorPid', $processorPid);
                 LoggerMDC::put('workerPid', posix_getpid());
                 LoggerNDC::push('worker');
                 $code = 0;
                 try {
                     $worker = $queue->getWorker();
                     $worker->setNumber($workerNumber);
                     $worker->run($tasksForWorker);
                 } catch (Exception $exception) {
                     Logger::getLogger('queue')->error('Exception in worker', $exception);
                     $code = 255;
                 }
                 LoggerNDC::pop();
                 $this->end($code);
             }
         }
     } catch (Exception $exception) {
         Logger::getLogger('queue')->error('Exception in processor', $exception);
         $this->terminate(array_keys($this->childrenInfo));
         throw $exception;
     }
 }