Google Cloud Stackdriver и монолог Symfony

Я работаю с Google Cloud (GKE) и хочу использовать их систему для регистрации и мониторинга (Stackdriver). Мой проект находится под PHP Symfony3. Я ищу, как войти в стек в некоторых журналах моего проекта Symfony.

Я видел, что есть официальная библиотека:

https://github.com/GoogleCloudPlatform/google-cloud-php

И класс PSR-3:

http://googlecloudplatform.github.io/google-cloud-php/#/docs/v0.20.1/logging/psrlogger

У меня вопрос, как интегрировать это в моем config.yml с монологом?

0

Решение

Я сделал это, выполнив следующее:

composer require "google/cloud":"~0.20"

В конфиге я использовал собственный обработчик:

monolog:
handlers:
main:
type: service
id:   stackdriver_handler

Зарегистрировать службу обработчика:

services:
stackdriver_handler:
class: Acme\MyBundle\Monolog\StackdriverHandler

Вот класс обработчика, который я использовал:

<?php

namespace Acme\MyBundle\Monolog\Handler;

use Google\Cloud\Logging\LoggingClient;
use Monolog\Handler\PsrHandler;
use Monolog\Logger;
use Psr\Log\LoggerInterface;

class StackdriverHandler extends PsrHandler
{
/**
* @var LoggerInterface[]
*/
protected $loggers;

/**
* @var LoggingClient
*/
protected $client;

/**
* @var string
*/
protected $name;

/**
* StackdriverHandler constructor.
*
* @param LoggerInterface $projectId
* @param bool            $name
* @param bool|int        $level
* @param bool            $bubble
*/
public function __construct($projectId, $name, $level = Logger::DEBUG, $bubble = true)
{
$this->client = new LoggingClient(
[
'projectId' => $projectId,
]
);

$this->name   = $name;
$this->level  = $level;
$this->bubble = $bubble;
}

/**
* {@inheritdoc}
*/
public function handle(array $record)
{
if (!$this->isHandling($record)) {
return false;
}

$this->getLogger($record['channel'])->log(strtolower($record['level_name']), $record['message'], $record['context']);

return false === $this->bubble;
}

/**
* @param $channel
*
* @return LoggerInterface
*/
protected function getLogger($channel)
{
if (!isset($this->loggers[$channel])) {
$this->loggers[$channel] = $this->client->psrLogger($this->name, ['labels' => ['context' => $channel]]);
}

return $this->loggers[$channel];
}
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]