示例#1
0
 public function formatMessage(MougrimLogger $logger, $level, $message, \Exception $throwable = null)
 {
     $prefix = '';
     $mdc = LoggerMDC::getMap();
     if ($this->logUserInfo) {
         foreach (['ip', 'userId', 'sessionId'] as $key) {
             $context = isset($mdc[$key]) ? $mdc[$key] : null;
             $context = LoggerRender::render($context);
             $prefix .= '[' . $context . ']';
             unset($mdc[$key]);
         }
     }
     $level = MougrimLogger::getLevelName($level);
     $formatted = date('Y-m-d H:i:s') . ' ' . $prefix . '[' . $level . '][' . $logger->getName() . ']';
     $ndcString = '';
     if ($ndcStack = LoggerNDC::getStack()) {
         $ndcString = implode(' ', $ndcStack);
     }
     $formatted .= '[' . $ndcString . ']';
     $mdcString = '';
     foreach ($mdc as $key => $context) {
         $mdcString .= $key . '=' . $context . ' ';
     }
     $formatted .= '[' . trim($mdcString) . ']';
     $formatted .= ' ' . LoggerRender::render($message);
     if ($throwable) {
         $formatted .= ' ' . LoggerRender::render($throwable);
     }
     return $formatted . PHP_EOL;
 }
 private function createLogger(Logger $logger, LoggerHierarchy $hierarchy, array $config)
 {
     if (isset($config['appenders'])) {
         foreach ($config['appenders'] as $appenderConfig) {
             if (is_string($appenderConfig)) {
                 $appender = $hierarchy->getAppender($appenderConfig);
             } elseif (is_array($appenderConfig)) {
                 $appender = $this->createAppender($hierarchy, $appenderConfig);
             } else {
                 LoggerPolicy::processConfigurationError('Appender invalid config');
                 continue;
             }
             $logger->addAppender($appender);
         }
         if (isset($config['addictive'])) {
             $logger->setAddictive($config['addictive']);
         }
         if (isset($config['maxLevel'])) {
             $logger->setMaxLevel($config['maxLevel']);
         }
         if (isset($config['minLevel'])) {
             $logger->setMinLevel($config['minLevel']);
         }
     }
 }
示例#3
0
 public function process(Task $task)
 {
     Logger::getLogger('queue')->info("begin id:{$task->getId()} (data:{$this->testField})");
     usleep(mt_rand(200000, 500000));
     // todo remove from queue, or unlock
     Logger::getLogger('queue')->info("end id:{$task->getId()} (data:{$this->testField})");
 }
示例#4
0
 public function testTest()
 {
     Logger::configure(['appenders' => ['stream' => ['class' => AppenderStream::class, 'stream' => '/dev/null']], 'root' => ['appenders' => ['stream']]]);
     $logger = Logger::getLogger('test');
     $start = microtime(1);
     for ($i = 1000; --$i;) {
         $logger->info('test');
     }
     $end = microtime(1);
     $this->assertLessThan(1.0, $end - $start, 'logger > root > stream');
     $logger = Logger::getRootLogger();
     $start = microtime(1);
     for ($i = 1000; --$i;) {
         $logger->info('test');
     }
     $end = microtime(1);
     $this->assertLessThan(1.0, $end - $start, 'root > stream');
     $appenders = Logger::getRootLogger()->getAppenders();
     $appender = $appenders[0];
     $start = microtime(1);
     for ($i = 1000; --$i;) {
         $appender->append($logger, Logger::INFO, 'test', null);
     }
     $end = microtime(1);
     $this->assertLessThan(1.0, $end - $start, 'stream');
 }
示例#5
0
 public function formatMessage(Logger $logger, $level, $message, \Exception $throwable = null)
 {
     $formatted = $logger->getName() . ' [' . Logger::getLevelName($level) . '] ';
     if ($ndc = LoggerNDC::getStack()) {
         $formatted .= implode(' ', $ndc) . ' ';
     }
     if ($mdc = LoggerMDC::getMap()) {
         foreach ($mdc as $key => $context) {
             $formatted .= $key . '=' . $context . ' ';
         }
     }
     $formatted .= '- ' . LoggerRender::render($message);
     if ($throwable) {
         $formatted .= ' ' . LoggerRender::render($throwable);
     }
     return $formatted . PHP_EOL;
 }
示例#6
0
 public function unlockTasks(array $tasks = null)
 {
     $logger = Logger::getLogger('file-queue');
     $logger->info('unlock tasks');
     if ($tasks === null) {
         $tasks = $this->tasks;
     }
     $statusFileObject = $this->getStatusFileObject();
     if (!$statusFileObject->flock(LOCK_EX)) {
         throw new \RuntimeException("Can't get lock for status file {$this->getStatusFile()}");
     }
     $tasksFileObject = new \SplFileObject($this->getTasksFile(), 'a');
     foreach ($tasks as $task) {
         if ($tasksFileObject->fputcsv([$task->getId(), $task->getData()]) === false) {
             throw new \RuntimeException("Can't write task to tasks file {$this->getTasksFile()}");
         }
     }
     if (!$statusFileObject->flock(LOCK_UN)) {
         $logger->warn("Can't release lock");
     }
 }
示例#7
0
 public function render(Logger $logger, $level, $message, \Exception $throwable = null)
 {
     return $this->format(Logger::getLevelName($level));
 }
}
/* @noinspection PhpIncludeInspection */
$config = (require $params['config']);
if (!$config) {
    echo "Config should be not empty\n";
    exit(1);
}
if (!is_array($config)) {
    echo "Config should be array\n";
    exit(1);
}
$loggerConfig = [];
if (isset($config['loggerConfig']) && is_array($config['loggerConfig'])) {
    $loggerConfig = $config['loggerConfig'];
}
Logger::configure($loggerConfig);
$processor = new Processor();
$signalHandler = new SignalHandler();
$processor->setSignalHandler($signalHandler);
if (!isset($config['mainConfig'])) {
    echo "You should specify mainConfig key in config. See documentation for more information.\n";
    exit(1);
}
$processor->setMainConfig($config['mainConfig']);
if (!isset($config['processorConfig'])) {
    echo "You should specify processorConfig key in config. See documentation.\n";
    exit(1);
}
if (!isset($config['processorConfig']['configReader'])) {
    echo "You should specify processorConfig.configReader key in config. See documentation.\n";
    exit(1);
示例#9
0
 private function fork()
 {
     for ($i = 0; $i < 3; ++$i) {
         if (isset($pid)) {
             usleep(1000000);
         }
         $pid = pcntl_fork();
         if ($pid >= 0) {
             return $pid;
         }
         $error_number = pcntl_get_last_error();
         $error = "[{$error_number}] " . pcntl_strerror($error_number);
         Logger::getLogger('queue')->warn("Can`t fork, retryNumber={$i}, pid: '" . var_export($pid, true) . "', error: '{$error}'", new Exception());
     }
     throw new RuntimeException('Can`t fork');
 }
示例#10
0
 protected function getMougrimLogger($category)
 {
     return MougrimLogger::getLogger($category);
 }
示例#11
0
 public function testMaxLevel()
 {
     $logger = new Logger('root');
     $appender = new AppenderTest();
     $logger->addAppender($appender);
     $logger->log(Logger::INFO, 1);
     $this->assertSame([[Logger::INFO, 1]], $appender->logs);
     $logger->setMaxLevel(Logger::INFO);
     $logger->log(Logger::INFO, 2);
     $logger->log(Logger::FATAL, 3);
     $logger->log(Logger::DEBUG, 4);
     $this->assertSame([[Logger::INFO, 1], [Logger::INFO, 2], [Logger::DEBUG, 4]], $appender->logs);
     return;
 }
示例#12
0
 protected function beforeRun()
 {
     $signalHandler = $this->getQueue()->getProcessor()->getSignalHandler();
     // даже если сигнал был прислан до подписки, метод dispatch() еще не вызывался,
     // поэтому terminate нормально обработается
     $signalHandler->addHandler(SIGTERM, [$this, 'signalTerminate'], false);
     $signalHandler->addHandler(SIGINT, [$this, 'signalTerminate'], false);
     Logger::reopen();
 }
 public function testLogStream()
 {
     $path = '/tmp/log.txt';
     if (is_file($path)) {
         unlink($path);
     }
     Logger::configure();
     $appender = new AppenderStream($path);
     $appender->setLayout(new LayoutSimple());
     Logger::getRootLogger()->addAppender($appender);
     Logger::getRootLogger()->info('hello world');
     $this->assertSame('root [INFO] - hello world' . PHP_EOL, file_get_contents($path));
 }