I had the code to add a RavenHandler in AppServiceProvider and it was working fine, only logging Logger::ERROR
and above as intended. I've merely moved it to a separate ExternalLogServiceProvider for reuse in other projects, and now it's sending everything to Sentry from Logger::INFO
upwards.
I can't see why this might be happening. Surely either it would log or wouldn't. I can't see why the filter is suddenly being ignored...
Here's the diff:
@@ -3,26 +3,12 @@ declare(strict_types=1);
namespace Healthcheck\Providers;
-use Healthcheck\Mail\Handlers\LaravelMailerHandler;
-use Healthcheck\Helpers\Helpers;
-
use Aws\Ec2\Ec2Client;
use Aws\S3\S3Client;
use Aws\Sqs\SqsClient;
use Illuminate\Support\ServiceProvider;
-use Monolog\Formatter\LineFormatter;
-use Monolog\Handler\RavenHandler;
-use Monolog\Logger;
-use Monolog\Processor\IntrospectionProcessor;
-
-use Raven_Client;
-
-use Somsip\Logger\Formatter\CallerInlineFormatter;
-
-use Log;
-
class AppServiceProvider extends ServiceProvider
{
/**
@@ -39,10 +25,10 @@ class AppServiceProvider extends ServiceProvider
* Register any application services.
*
* @return void
+ * @codeCoverageIgnore
*/
public function register()
{
- // @codeCoverageIgnoreStart
$this->app->bind(Ec2Client::class, function ($app) {
$params = [
'region' => 'us-east-1',
@@ -75,46 +61,5 @@ class AppServiceProvider extends ServiceProvider
}
return new S3Client($params);
});
- // @codeCoverageIgnoreEnd
-
- // Setup some custom logging
- // FIXME: This could be in it's own ServiceProvider
- $monolog = Log::getMonolog();
- // Change the default formatter
- $monolog->getHandlers()[0]->setFormatter(new CallerInlineFormatter());
- $monolog->getHandlers()[0]->setLevel(config('app.logLevel'));
- // Get all output from logger, but ignore references to non-app classes
- $ignores = [
- 'Writer',
- 'Facade'
- ];
- $monolog->pushProcessor(new IntrospectionProcessor(Logger::DEBUG, $ignores));
-
- // @codeCoverageIgnoreStart
- // FIXME: This could be in it's own ServiceProvider
- if (!app()->environment('testing')) {
- // Email critical errors to admin
- $monolog->pushHandler(
- new LaravelMailerHandler(
- config('mail.admin'),
- 'Healthcheck: CRITICAL ERROR encountered on ' . strtoupper(config('services.aws.account')),
- Logger::CRITICAL
- )
- );
-
- // Use central log if available
- if (config('services.raven.dsn')) {
- $client = new Raven_Client(config('services.raven.dsn'));
- $handler = new RavenHandler(
- $client,
- Logger::ERROR
- );
- $handler->setFormatter(new LineFormatter("%message% %context% %extra%\n"));
- $monolog->pushHandler($handler);
- }
- }
- // @codeCoverageIgnoreEnd
}
}
----------------- app/Providers/ExternalLogServiceProvider.php -----------------
new file mode 100644
index 0000000..957c414
@@ -0,0 +1,53 @@
+<?php
+declare(strict_types=1);
+
+namespace Healthcheck\Providers;
+
+use Healthcheck\Mail\Handlers\LaravelMailerHandler;
+
+use Illuminate\Support\ServiceProvider;
+
+use Monolog\Formatter\LineFormatter;
+use Monolog\Handler\RavenHandler;
+use Monolog\Logger;
+
+use Raven_Client;
+
+use Log;
+
+class ExternalLogServiceProvider extends ServiceProvider
+{
+ /**
+ * Setup external logging
+ *
+ * @return void
+ * @codeCoverageIgnore
+ */
+ public function register()
+ {
+ if (!app()->environment('testing')) {
+ // Email critical errors to admin
+ $monolog = Log::getMonolog();
+ $monolog->pushHandler(
+ new LaravelMailerHandler(
+ config('mail.admin'),
+ 'Healthcheck: CRITICAL ERROR encountered on ' . strtoupper(config('services.aws.account'));
+ Logger::CRITICAL
+ )
+ );
+
+ // Use central log if available
+ if (config('services.raven.dsn')) {
+ $client = new Raven_Client(config('services.raven.dsn'));
+ $handler = new RavenHandler(
+ $client,
+ Logger::ERROR
+ );
+ $handler->setFormatter(new LineFormatter("%message% %context% %extra%\n"));
+ $monolog->pushHandler($handler);
+ }
+ }
+ }
+}
------------------ app/Providers/InlineLogServiceProvider.php ------------------
new file mode 100644
index 0000000..de97081
@@ -0,0 +1,37 @@
+<?php
+declare(strict_types=1);
+
+namespace Healthcheck\Providers;
+
+use Illuminate\Support\ServiceProvider;
+
+use Monolog\Logger;
+use Monolog\Processor\IntrospectionProcessor;
+
+use Raven_Client;
+
+use Somsip\Logger\Formatter\CallerInlineFormatter;
+
+use Log;
+
+class InlineLogServiceProvider extends ServiceProvider
+{
+ /**
+ * Setup some custom logging
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $monolog = Log::getMonolog();
+ // Change the default formatter
+ $monolog->getHandlers()[0]->setFormatter(new CallerInlineFormatter());
+ $monolog->getHandlers()[0]->setLevel(config('app.logLevel'));
+ // Get all output from logger, but ignore references to non-app classes
+ $ignores = [
+ 'Writer',
+ 'Facade'
+ ];
+ $monolog->pushProcessor(new IntrospectionProcessor(Logger::DEBUG, $ignores));
+ }
+}
-------------------------------- config/app.php --------------------------------
index b72115c..cfb3820 100644
@@ -174,6 +174,8 @@ return [
*/
Healthcheck\Providers\AppServiceProvider::class,
Healthcheck\Providers\AuthServiceProvider::class,
+ Healthcheck\Providers\ExternalLogServiceProvider::class,
+ Healthcheck\Providers\InlineLogServiceProvider::class,
Healthcheck\Providers\EventServiceProvider::class,
Healthcheck\Providers\RouteServiceProvider::class,
],
The InlineLogServiceProvider just prepends the Class::method() to each log entry and is working fine. It was just split out to it's own ServiceProvider at the same time.
Thanks,