如何在lumen/laravel应用程序中使用google云日志

6jjcrrmo  于 2023-02-10  发布在  Go
关注(0)|答案(3)|浏览(175)

我想知道如何在lumen\laravel应用程序中使用谷歌云日志库,有some examples for php,但我想知道如何在该框架中以最佳方式实现。

kupeojn6

kupeojn61#

Lumen似乎和Laravel使用了相同的日志基础设施。默认情况下,它使用Monolog,这是一个PSR-3兼容的日志库,但我认为下面的代码可能也适用于Google云日志:
创建记录器工厂类:

class CreateGoogleCloudLogger {
    public function __invoke() {
       $logging = new LoggingClient([
          'projectId' => $projectId
       ]);
       return $logging->psrLogger('app');      
    }
}

更改.env文件:

LOG_CHANNEL=googlecloud

然后将其添加到AppServiceProvider寄存器函数中

config(['logging.channels.googlecloud' => [
    'driver' => 'custom',
    'via' => App\Logging\CreateGoogleCloudLogger::class,
] ]);

这应该使用工厂来创建PSR-3兼容的记录器。

dgenwo3n

dgenwo3n2#

我发现在stack通道(Laravel 9的默认配置)中使用时,接受的答案对我不起作用。这似乎是由于堆栈通道需要Monolog记录器,而不仅仅是PSR-3记录器。为了使其起作用,我复制了(或“从中获得灵感”)https://github.com/einnar82/google-stack-driver
未对app.php进行任何更改。
.env中(注意,您需要在此处设置实际值)

LOG_LEVEL=debug
LOG_CHANNELS=single,googlecloud
GOOGLE_PROJECT=my-project-name-from-google
GOOGLE_APPLICATION_CREDENTIALS=/var/www/somepath/credentials-file-from-google.json

logging.php中:

'googleProjectId' => env('GOOGLE_PROJECT'),
'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => explode(',', env('LOG_CHANNELS', 'single')),
        'ignore_exceptions' => false,
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => env('LOG_LEVEL', 'debug'),
    ],

    'googlecloud' => [
        'driver' => 'custom',
        'via' => \App\Logging\CreateGoogleCloudLogger::class,
        'level' => env('LOG_LEVEL', 'debug'),
    ],
];

app/Logging/CreateGoogleCloudLogger.php

namespace App\Logging;

use Google\Cloud\Logging\LoggingClient;
use Monolog\Handler\PsrHandler;
use Monolog\Logger;

class CreateGoogleCloudLogger
{
    public function __invoke(array $config)
    {
        $logName = config('app.name');
        $logging = new LoggingClient([
            'projectId' => config('logging.googleProjectId')
        ]);
        $psrLogger = $logging->psrLogger($logName);

        $handler = new PsrHandler($psrLogger);
        return new Logger($logName, [$handler]);
    }
}

然后在你的应用程序中,你可以随时...

Log::debug('This is a log message');
try {
    $var = $this->doSomethingRisky();
} catch (\Exception $e) {
    Log::warning('The risky thing failed but we will carry on anyway', ['message' => $e->getMessage()]);
    $var = null;
}
juzqafwq

juzqafwq3#

由于Laravel使用Monolog Logger,所以你可以利用它。就在最近,Monolog确实增加了对Google云的支持。
下面的解释确实适用于Laravel和Lumen。

这只是一次配置更改

您只需要更改一个配置设置。
在.env文件中设置GoogleCloudLoggingFormatter,如下所示:

LOG_STDERR_FORMATTER=\Monolog\Formatter\GoogleCloudLoggingFormatter::class

或者在config/logging.php中定义它

'stderr' => [
    'driver' => 'monolog',
    'level' => env('LOG_LEVEL', 'debug'),
    'handler' => StreamHandler::class,
    'formatter' => env('LOG_STDERR_FORMATTER', \Monolog\Formatter\GoogleCloudLoggingFormatter::class),
    'with' => [
        'stream' => 'php://stderr',
    ],
],

记住选择stderr日志记录通道。如果您喜欢不同的通道名称,也可以重命名它。

Google云日志记录包

谷歌云日志包确实可以工作,但是它是你不需要的一个依赖。它没有错,但是为什么不保持它的简单呢?

Monolog支持Google版本2.8.0或3.2.0以上。

如果您使用的是旧版本,您可以编写一个自定义格式设置程序来实现相同的效果。

您需要更多信息吗?

就在几天前,我写了一篇关于它的文章。如果你想了解更多信息,欢迎阅读:https://jonassiewertsen.com/blog/laravel-logging-show-correct-severity-levels-on-the-google-cloud-platform

相关问题