Можно ли использовать Monolog в GAE и записывать уровни ведения журнала в Stack Driver? - PullRequest
3 голосов
/ 28 февраля 2020

На целых rnet имеется число сообщений , указывающих, что правильный способ использования Monolog в движке приложений Google (стандарт GAE) выглядит следующим образом:

   $logger = new  Monolog\Logger($name);
   $syslogHandler = new \Monolog\Handler\SyslogHandler("Ident_String", LOG_USER, \Monolog\Logger::INFO);
        $syslogHandler->setFormatter(new \Monolog\Formatter\JsonFormatter());
        $logger->pushHandler($syslogHandler);
        break;


    $logger->warn("Starting priam import." );

Это заставляет меня регистрироваться, но уровень скрывается в textPayload:

textPayload: "[28-Feb-2020 11:00:07] ПРЕДУПРЕЖДЕНИЕ: [пул приложение] ребенок 22 сказал в stderr: "[2020-02-28 06:00:07] match_old.INFO: Выполнение супер огромного SELECT, чтобы получить все intls. [] [] ""

, а значок уровня всегда обозначен звездочкой. enter image description here Что-то изменилось? Я использую php 7.3 во время выполнения по стандарту GAE. Есть ли способ использовать Monolog в GAE, который позволит вам правильно использовать драйвер стека?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Доступен пакет, который позволяет отправлять sh Monolog в Stackdriver.

Согласно do c:

Поставляемый StackdriverHandler копирует указанный журнал уровень серьезности Stackdriver, основанный на вашем методе журнала.

Он также учитывает аргумент контекста, который позволяет вам отправлять дополнительные контекстные данные с вашим сообщением журнала. Это будет сохранено в сообщении журнала в jsonPayload.data.

Исходный код можно найти здесь monolog-stackdriver

0 голосов
/ 07 апреля 2020

Я завел условно загрузку другого регистратора локально, чем на GAE. Это выполнимо, но кажется ненужным хаком, учитывая, что монолог - такая популярная библиотека. И, о, это 2020 год.

<?php
require_once __DIR__ . '/../vendor/autoload.php';

use Google\Cloud\Logging\LoggingClient;

function  get_logger($name) {
    $kind = getenv('LOG_TYPE')?:'remote';
    return _get_logger($kind, $name);
}

function _get_logger($kind, $name) {
    if ($kind ==='local') {
        $logger = new  Monolog\Logger($name);
        $logger->pushHandler(new Monolog\Handler\StreamHandler('php://stdout', Monolog\Logger::INFO));
        return $logger;
    }
    $logging = new LoggingClient();
    $logger = $logging->psrLogger($name);
    return $logger;
}

Я надеюсь, что кто-то может сделать эту работу с монологом.

...