Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
CloudWatchLoggerFactory
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 __invoke
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Logging;
4
5use Aws\CloudWatchLogs\CloudWatchLogsClient;
6use Monolog\Handler\FilterHandler;
7use Monolog\Level;
8use Monolog\Logger;
9use PhpNexus\Cwh\Handler\CloudWatch;
10
11class CloudWatchLoggerFactory
12{
13    /**
14     * Create a custom Monolog instance.
15     *
16     * @return \Monolog\Logger
17     */
18    public function __invoke(array $config)
19    {
20        $sdkParams = $config['sdk'];
21        $tags = $config['tags'] ?? [];
22        $name = $config['name'] ?? 'cloudwatch';
23
24        // Instantiate AWS SDK CloudWatch Logs Client
25        $client = new CloudWatchLogsClient($sdkParams);
26
27        // Log group name, will be created if none
28        $env = config('app.env');
29        $groupInfoName = config('app.name').($env !== 'production' ? '-'.$env : '').'-info';
30        $groupErrorName = config('app.name').($env !== 'production' ? '-'.$env : '').'-error';
31
32        // Log stream names for info and error
33        $infoName = $config['stream'].date('Y-m-d-H-a');
34
35        // Days to keep logs, 14 by default. Set to `null` to allow indefinite retention.
36        $retentionDays = $config['retention'];
37
38        // Instantiate handlers for info and error (tags are optional)
39        $infoHandler = new CloudWatch($client, $groupInfoName, $infoName, $retentionDays, 10000, $tags);
40        $errorHandler = new CloudWatch($client, $groupErrorName, $infoName, $retentionDays, 10000, $tags);
41
42        $infoHandler = new FilterHandler($infoHandler, Level::Info, Level::Notice);
43        $errorHandler = new FilterHandler($errorHandler, Level::Error, Level::Critical);
44
45        // Create a log channel
46        $logger = new Logger($name);
47        // Set handlers for different log levels
48        $logger->pushHandler($infoHandler);
49        $logger->pushHandler($errorHandler);
50
51        return $logger;
52    }
53}