Skip to content

Commit

Permalink
consistent BLs, added formatter in readme and removed fully qualified…
Browse files Browse the repository at this point in the history
… class name in test
  • Loading branch information
developernaren committed Nov 12, 2018
1 parent 341dc90 commit 99b35d2
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 70 deletions.
2 changes: 1 addition & 1 deletion .gitignore
@@ -1 +1 @@
vendor
vendor
6 changes: 3 additions & 3 deletions config/logging.php
Expand Up @@ -5,13 +5,13 @@
'name' => env('CLOUDWATCH_LOG_NAME', ''),
'region' => env('CLOUDWATCH_LOG_REGION', ''),
'credentials' => [
'key' => env('CLOUDWATCH_LOG_KEY', ''),
'secret' => env('CLOUDWATCH_LOG_SECRET', ''),
'key' => env('CLOUDWATCH_LOG_KEY', ''),
'secret' => env('CLOUDWATCH_LOG_SECRET', ''),
],
'stream_name' => env('CLOUDWATCH_LOG_STREAM_NAME', 'laravel_app'),
'retention' => env('CLOUDWATCH_LOG_RETENTION_DAYS', 14),
'group_name' => env('CLOUDWATCH_LOG_GROUP_NAME', 'laravel_app'),
'version' => env('CLOUDWATCH_LOG_VERSION', 'latest'),
'formatter' => \Monolog\Formatter\JsonFormatter::class
'formatter' => \Monolog\Formatter\JsonFormatter::class,
],
];
7 changes: 4 additions & 3 deletions readme.md
Expand Up @@ -6,9 +6,9 @@ You can use laravel's default `\Log` class to use this

`\Log::info('user logged in', ['id' => 123, 'name' => 'Naren']);`

### Configs
### Config

Configs for logging is defined at `config/logging.php`. Add `cloudwatch` to the `channels` array
Config for logging is defined at `config/logging.php`. Add `cloudwatch` to the `channels` array

```
'channels' => [
Expand All @@ -23,11 +23,12 @@ Configs for logging is defined at `config/logging.php`. Add `cloudwatch` to the
'retention' => env('CLOUDWATCH_LOG_RETENTION_DAYS', 14),
'group_name' => env('CLOUDWATCH_LOG_GROUP_NAME', 'laravel_app'),
'version' => env('CLOUDWATCH_LOG_VERSION', 'latest'),
'formatter' => \Monolog\Formatter\JsonFormatter::class
],
]
```

Add correct values to keys in your .env file. And it should work.
Add correct values to keys in your `.env` file. And it should work.

### Add To Project

Expand Down
81 changes: 42 additions & 39 deletions src/Providers/CloudWatchServiceProvider.php
Expand Up @@ -16,18 +16,18 @@ public function boot()
if (!env('DISABLE_CLOUDWATCH_LOG')) {
$app = $this->app;
$app['log']->listen(function () use ($app) {
$args = func_get_args();

// Laravel 5.4 returns a MessageLogged instance only
if (count($args) == 1) {
$level = $args[0]->level;
$message = $args[0]->message;
$context = $args[0]->context;
} else {
$level = $args[0];
$message = $args[1];
$context = $args[2];
}
$args = \func_get_args();

// Laravel 5.4 returns a MessageLogged instance only
if (1 == \count($args)) {
$level = $args[0]->level;
$message = $args[0]->message;
$context = $args[0]->context;
} else {
$level = $args[0];
$message = $args[1];
$context = $args[2];
}

if ($message instanceof \ErrorException) {
return $this->getLogger()->log($level, $message, $context);
Expand Down Expand Up @@ -60,33 +60,6 @@ public function getLogger()
return $logger;
}

/**
* Resolve a Formatter instance from configurations or use LineFormatter
* as default.
*
* @param array $configs
*
* @return \Monolog\Formatter\FormatterInterface
*/
private function resolveFormatter(array $configs)
{
if (isset($configs['formatter'])) {
$formatter = $configs['formatter'];

if (is_string($formatter) && class_exists($formatter)) {
return $this->app->make($formatter);
}
if (is_callable($formatter)) {
return $formatter($configs);
}
}

return new LineFormatter(
'%channel%: %level_name%: %message% %context% %extra%',
null, false, true
);
}

/**
* Code "inspired" from here
* https://aws.amazon.com/blogs/developer/php-application-logging-with-amazon-cloudwatch-logs-and-monolog
Expand Down Expand Up @@ -124,6 +97,7 @@ public function register()
* ]
*
* @return array
*
* @throws \Pagevamp\Exceptions\IncompleteCloudWatchConfig
*/
protected function getCredentials()
Expand All @@ -146,4 +120,33 @@ protected function getCredentials()
'credentials' => $cloudWatchConfigs['credentials'],
];
}

/**
* Resolve a Formatter instance from configurations or use LineFormatter
* as default.
*
* @param array $configs
*
* @return \Monolog\Formatter\FormatterInterface
*/
private function resolveFormatter(array $configs)
{
if (isset($configs['formatter'])) {
$formatter = $configs['formatter'];

if (\is_string($formatter) && class_exists($formatter)) {
return $this->app->make($formatter);
}
if (\is_callable($formatter)) {
return $formatter($configs);
}
}

return new LineFormatter(
'%channel%: %level_name%: %message% %context% %extra%',
null,
false,
true
);
}
}
49 changes: 25 additions & 24 deletions tests/Providers/CloudWatchServiceProviderTest.php
Expand Up @@ -2,16 +2,17 @@

namespace Tests\Providers;


use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\Foundation\Application;
use Monolog\Formatter\JsonFormatter;
use Monolog\Formatter\LineFormatter;
use Monolog\Formatter\LogglyFormatter;
use Monolog\Logger;
use Pagevamp\Providers\CloudWatchServiceProvider;
use PHPUnit\Framework\TestCase;
use Mockery;

class CloudWatchServiceProviderTest extends \PHPUnit\Framework\TestCase
class CloudWatchServiceProviderTest extends TestCase
{
public function testGetLoggerShouldResolveCustomFormatterInstanceFromConfiguration()
{
Expand All @@ -26,24 +27,24 @@ public function testGetLoggerShouldResolveCustomFormatterInstanceFromConfigurati
'retention' => 14,
'group_name' => 'laravel_app',
'version' => 'latest',
'formatter' => JsonFormatter::class
'formatter' => JsonFormatter::class,
];

$config = \Mockery::mock(Repository::class);
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')
->once()
->with('logging.channels')
->andReturn([
'cloudwatch' => $cloudwatchConfigs
'cloudwatch' => $cloudwatchConfigs,
]);
$config->shouldReceive('get')
->once()
->with('logging.channels.cloudwatch')
->andReturn($cloudwatchConfigs);

$formatter = \Mockery::mock(JsonFormatter::class);
$formatter = Mockery::mock(JsonFormatter::class);

$app = \Mockery::mock(Application::class);
$app = Mockery::mock(Application::class);
$app->shouldReceive('make')
->once()
->with('config')
Expand Down Expand Up @@ -77,24 +78,24 @@ public function testGetLoggerShouldResolveDefaultFormatterInstanceWhenConfigIsNu
'retention' => 14,
'group_name' => 'laravel_app',
'version' => 'latest',
'formatter' => null
'formatter' => null,
];

$config = \Mockery::mock(Repository::class);
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')
->once()
->with('logging.channels')
->andReturn([
'cloudwatch' => $cloudwatchConfigs
'cloudwatch' => $cloudwatchConfigs,
]);
$config->shouldReceive('get')
->once()
->with('logging.channels.cloudwatch')
->andReturn($cloudwatchConfigs);

$formatter = \Mockery::mock(JsonFormatter::class);
$formatter = Mockery::mock(JsonFormatter::class);

$app = \Mockery::mock(Application::class);
$app = Mockery::mock(Application::class);
$app->shouldReceive('make')
->once()
->with('config')
Expand Down Expand Up @@ -127,24 +128,24 @@ public function testGetLoggerShouldResolveDefaultFormatterInstanceWhenConfigIsNo
'stream_name' => 'laravel_app',
'retention' => 14,
'group_name' => 'laravel_app',
'version' => 'latest'
'version' => 'latest',
];

$config = \Mockery::mock(Repository::class);
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')
->once()
->with('logging.channels')
->andReturn([
'cloudwatch' => $cloudwatchConfigs
'cloudwatch' => $cloudwatchConfigs,
]);
$config->shouldReceive('get')
->once()
->with('logging.channels.cloudwatch')
->andReturn($cloudwatchConfigs);

$formatter = \Mockery::mock(LineFormatter::class);
$formatter = Mockery::mock(LineFormatter::class);

$app = \Mockery::mock(Application::class);
$app = Mockery::mock(Application::class);
$app->shouldReceive('make')
->once()
->with('config')
Expand Down Expand Up @@ -178,26 +179,26 @@ public function testGetLoggerShouldResolveCallableFormatter()
'retention' => 14,
'group_name' => 'laravel_app',
'version' => 'latest',
'formatter' => function($configs) {
'formatter' => function ($configs) {
return new LogglyFormatter();
}
},
];

$config = \Mockery::mock(Repository::class);
$config = Mockery::mock(Repository::class);
$config->shouldReceive('get')
->once()
->with('logging.channels')
->andReturn([
'cloudwatch' => $cloudwatchConfigs
'cloudwatch' => $cloudwatchConfigs,
]);
$config->shouldReceive('get')
->once()
->with('logging.channels.cloudwatch')
->andReturn($cloudwatchConfigs);

$formatter = \Mockery::mock(LogglyFormatter::class);
$formatter = Mockery::mock(LogglyFormatter::class);

$app = \Mockery::mock(Application::class);
$app = Mockery::mock(Application::class);
$app->shouldReceive('make')
->once()
->with('config')
Expand All @@ -217,4 +218,4 @@ public function testGetLoggerShouldResolveCallableFormatter()
$logger->getHandlers()[0]->getFormatter()
);
}
}
}

0 comments on commit 99b35d2

Please sign in to comment.