Monolog 可以在 GAE 上使用并在 Stack Driver 中记录日志级别吗?

Can Monolog be used on GAE and have the logging levels recorded in Stack Driver?

互联网上有许多 posts 指出在 google 应用引擎(GAE 标准)上使用 Monolog 的正确方法如下:

   $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] WARNING: [pool app] child 22 said into stderr: "[2020-02-28 06:00:07] match_old.INFO: Doing a super huge SELECT to get all intls. [] []""

并且关卡图标始终是一个点刻的星号。 有什么改变吗?我在 GAE 标准上使用 php 7.3 运行-time。有没有一种方法可以在 GAE 上使用 Monolog,让您正确使用堆栈驱动程序?

我最终有条件地在本地加载了与在 GAE 上不同的记录器。它是可行的,但考虑到 monolog 是如此受欢迎的库,它似乎是一个不必要的 hack。而且,哦,现在是 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;
}

我希望有人可以用 monolog 来完成这项工作。

有一个可用的包允许您将 Monolog 推送到 Stackdriver。

根据文档:

The supplied StackdriverHandler copies the given log level into the Stackdriver's severity based on your log method.

It also respects the context argument which allows you to send extra contextual data with your log message. This will be stored in the log message under jsonPayload.data.

源代码可以在这里找到monolog-stackdriver