[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。 [] []“”
并且级别图标始终是点画星号。有什么改变吗?我在GAE标准上使用php 7.3运行时。有没有一种方法可以在GAE上使用Monolog,让您正确使用堆栈驱动程序?
有一个可用的软件包,可让您将Monolog推送到Stackdriver。
根据文档:
提供的StackdriverHandler将给定的日志级别复制到 基于您的日志方法的Stackdriver的严重性。
它还尊重context参数,该参数允许您发送额外的 与您的日志消息相关的上下文数据。这将存储在日志中 jsonPayload.data下的消息。
源代码可以在这里找到monolog-stackdriver
我结束了有条件地在本地加载与我在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;
}
我希望有人可以使用独白做这项工作。