php - Laravel 5.6 aws cloudwatch 日志

标签 php laravel amazon-web-services amazon-cloudwatch

将 Laravel 从 5.4 升级到 5.6。 Laravel 从 5.6 版本开始删除了 $app->configureMonologUsing

aws 的教程不再适用。 https://aws.amazon.com/tw/blogs/developer/php-application-logging-with-amazon-cloudwatch-logs-and-monolog/

任何人都可以建议我将 $app->configureMonologUsing 中的逻辑迁移到哪里?

谢谢

最佳答案

安装最新版本的 CloudWatch 处理程序库:

composer require maxbanton/cwh

您可以在 config/logging.php 中添加自定义 channel ,如下所示:

'cloudwatch' => [
  'driver' => 'custom',
  'via' => \App\Logging\CloudWatchLoggerFactory::class,
  'sdk' => [
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'version' => 'latest',
    'credentials' => [
      'key' => env('AWS_ACCESS_KEY_ID'),
      'secret' => env('AWS_SECRET_ACCESS_KEY')
    ]
  ],
  'retention' => env('CLOUDWATCH_LOG_RETENTION',7),
  'level' => env('CLOUDWATCH_LOG_LEVEL','error')
],

和一个工厂类App/Logging/CloudWatchLoggerFactory.php为:

<?php

namespace App\Logging;

use Aws\CloudWatchLogs\CloudWatchLogsClient;
use Maxbanton\Cwh\Handler\CloudWatch;
use Monolog\Logger;

class CloudWatchLoggerFactory
{
    /**
     * Create a custom Monolog instance.
     *
     * @param  array  $config
     * @return \Monolog\Logger
     */
    public function __invoke(array $config)
    {
        $sdkParams = $config["sdk"];
        $tags = $config["tags"] ?? [ ];
        $name = $config["name"] ?? 'cloudwatch';

        // Instantiate AWS SDK CloudWatch Logs Client
        $client = new CloudWatchLogsClient($sdkParams);

        // Log group name, will be created if none
        $groupName = config('app.name') . '-' . config('app.env');

        // Log stream name, will be created if none
        $streamName = config('app.hostname');

        // Days to keep logs, 14 by default. Set to `null` to allow indefinite retention.
        $retentionDays = $config["retention"];

        // Instantiate handler (tags are optional)
        $handler = new CloudWatch($client, $groupName, $streamName, $retentionDays, 10000, $tags);

        // Create a log channel
        $logger = new Logger($name);
        // Set handler
        $logger->pushHandler($handler);

        return $logger;
    }
}

关于php - Laravel 5.6 aws cloudwatch 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50814388/

相关文章:

javascript - 在 JavaScript 中设置 PHP 变量的样式

php - Laravel 中发生注销事件时发布时间戳数据

php - Laravel-5.5:我可以在哪里使用 if 来以所需格式显示日期?

linux - 我无法连接到正在运行的 ubuntu ec2 实例

PHP:Mysqli 查询中的 Myqli 查询

php - 如何修复 Laravel 中的 undefined variable : task (View: C:\Users\Lilan\Desktop\ddd\resources\views\files\form.blade.php)

php - 通过模型上的特定方法订购 CGridView

php - 如何在 laravel 中为给定的输入搜索两个表

amazon-web-services - 如何拆分aws :username policy variable to check if permission has granted to write into it?

ios - AWS SNS - 平台应用程序已禁用