可以在GAE上使用Monolog,并在堆栈驱动程序中记录日志记录级别吗?

问题描述 投票:3回答:2

[Internet上有许多posts,它们指示在Google App引擎(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:“ [2020年2月28日11:00:07]警告:[pool app]子级22 对stderr说:“ [2020-02-28 06:00:07] match_old.INFO:做一个超级 巨大的SELECT获取所有intl。 [] []“”

并且级别图标始终是点画星号。enter image description here有什么改变吗?我在GAE标准上使用php 7.3运行时。有没有一种方法可以在GAE上使用Monolog,让您正确使用堆栈驱动程序?

php google-app-engine google-cloud-stackdriver monolog
2个回答
1
投票

有一个可用的软件包,可让您将Monolog推送到Stackdriver。

根据文档:

提供的StackdriverHandler将给定的日志级别复制到 基于您的日志方法的Stackdriver的严重性。

它还尊重context参数,该参数允许您发送额外的 与您的日志消息相关的上下文数据。这将存储在日志中 jsonPayload.data下的消息。

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


0
投票

我结束了有条件地在本地加载与我在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;
}

我希望有人可以使用独白做这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.