Last active
October 15, 2020 23:27
-
-
Save whobutsb/cd252668e191e796483da86706de3ec3 to your computer and use it in GitHub Desktop.
Custom New Relic Logger for Laravel that includes extra Metadata.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Logging; | |
use Auth; | |
use Monolog\Logger; | |
use Illuminate\Http\Request; | |
use Monolog\Handler\BufferHandler; | |
use NewRelic\Monolog\Enricher\{Handler, Processor}; | |
class NewRelicLogger | |
{ | |
protected $request; | |
public function __construct(Request $request = null) | |
{ | |
$this->request = $request; | |
} | |
public function __invoke(array $config) | |
{ | |
// add the new relic logger | |
$log = new Logger('newrelic'); | |
$log->pushProcessor(new Processor); | |
$handler = new Handler; | |
// Optional - if you don't have the new relic php agent installed. | |
//$handler->setLicenseKey('0123456789abcdef0123456789abcdef01234567'); | |
// using the BufferHandler improves the performance by batching the log | |
// messages to the end of the request | |
$log->pushHandler(new BufferHandler($handler)); | |
foreach ($log->getHandlers() as $handler) { | |
$handler->pushProcessor([$this, 'includeMetaData']); | |
} | |
return $log; | |
} | |
// lets add some extra metadata to every request | |
public function includeMetaData(array $record): array | |
{ | |
// set the service or app name to the record | |
$record['service'] = 'Laravel-App-Name'; | |
// set the hostname to record so we know host this was created on | |
$record['hostname'] = gethostname(); | |
// check to see if we have a request | |
if($this->request){ | |
$record['extra'] += [ | |
'ip' => $this->request->getClientIp(), | |
]; | |
// get the authenticated user | |
$user = Auth::user(); | |
// add the user information | |
if($user){ | |
$record['user'] = [ | |
'id' => $user->id ?? null, | |
'email' => $user->email ?? 'guest', | |
]; | |
} | |
} | |
return $record; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment