diff --git a/lib/private/backgroundjob/job.php b/lib/private/backgroundjob/job.php index 677b37e929..e726889484 100644 --- a/lib/private/backgroundjob/job.php +++ b/lib/private/backgroundjob/job.php @@ -52,7 +52,10 @@ abstract class Job implements IJob { $this->run($this->argument); } catch (\Exception $e) { if ($logger) { - $logger->error('Error while running background job: ' . $e->getMessage()); + $logger->logException($e, [ + 'app' => 'core', + 'message' => 'Error while running background job (class: ' . get_class($this) . ', arguments: ' . print_r($this->argument, true) . ')' + ]); } } } diff --git a/lib/private/log.php b/lib/private/log.php index 6c1666a9d7..addefe6e53 100644 --- a/lib/private/log.php +++ b/lib/private/log.php @@ -285,6 +285,8 @@ class Log implements ILogger { 'Line' => $exception->getLine(), ); $exception['Trace'] = preg_replace('!(login|checkPassword)\(.*\)!', '$1(*** username and password replaced ***)', $exception['Trace']); - $this->error('Exception: ' . json_encode($exception), $context); + $msg = isset($context['message']) ? $context['message'] : 'Exception'; + $msg .= ': ' . json_encode($exception); + $this->error($msg, $context); } } diff --git a/lib/public/ilogger.php b/lib/public/ilogger.php index 368b25ab69..2a727697a6 100644 --- a/lib/public/ilogger.php +++ b/lib/public/ilogger.php @@ -125,6 +125,14 @@ interface ILogger { /** * Logs an exception very detailed + * An additional message can we written to the log by adding it to the + * context. + * + * + * $logger->logException($ex, [ + * 'message' => 'Exception during cron job execution' + * ]); + * * * @param \Exception $exception * @param array $context diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php index 912e0e13b5..12413e2c52 100644 --- a/tests/lib/backgroundjob/job.php +++ b/tests/lib/backgroundjob/job.php @@ -18,8 +18,9 @@ class Job extends \Test\TestCase { public function testRemoveAfterException() { $jobList = new DummyJobList(); - $job = new TestJob($this, function () { - throw new \Exception(); + $e = new \Exception(); + $job = new TestJob($this, function () use ($e) { + throw $e; }); $jobList->add($job); @@ -27,8 +28,8 @@ class Job extends \Test\TestCase { ->disableOriginalConstructor() ->getMock(); $logger->expects($this->once()) - ->method('error') - ->with('Error while running background job: '); + ->method('logException') + ->with($e); $this->assertCount(1, $jobList->getAll()); $job->execute($jobList, $logger);