Ich möchte Monolog-Logs von meiner Laravel 5.1-Anwendung an Loggly.com Online-Log-Management-Service senden. Von allen möglichen Umgebungen, einschließlich der lokalen Entwicklung.Wie Log-Ereignis von Laravel Loggly zu senden?
Antwort
Ich habe einige veraltete Bibliotheken und komplizierte Wege gefunden, dies zu tun. So endete ich mit einer sehr einfachen Lösung. Tatsächlich haben Laravel Monolog Handler bereits Loggly Handler out of the box.
Config Info hinzufügen/services.php config:
'loggly' => array(
'key' => 'ENTER_YOUR_LOGGLY_TOKEN_HERE',
'tag' => 'ProjectName_' .strtolower(env('APP_ENV')),
),
als Monolog-Handler in Bootstrap/app.php hinzufügen, bevor $ app zurückgegeben:
/*
|--------------------------------------------------------------------------
| Setup Loggly Handler
|--------------------------------------------------------------------------
*/
$app->configureMonologUsing(function($monolog) {
$handler = new \Monolog\Handler\LogglyHandler(config('services.loggly.key'),\Monolog\Logger::DEBUG);
$handler->setTag(config('services.loggly.tag'));
$monolog->pushHandler($handler);
});
Voila! Sie erhalten Ihre Monolog-Logs im Loggly-Dashboard.
Ich war in der Lage, Laravel Standard lokalen Log-Verhalten zu haben, und drängen auf Loggly in der gleichen Zeit, indem Sie mladen-janjetovic's Code ein wenig zwicken. Getestet auf Laravel 5.3
config/services.php:
'loggly' => [
'key' => 'ENTER_YOUR_LOGGLY_TOKEN_HERE',
'tag' => 'ProjectName_' .strtolower(env('APP_ENV')),
],
Bootstrap/app.php:
/*
|--------------------------------------------------------------------------
| Push to Loggly, and save locally.
|--------------------------------------------------------------------------
*/
$app->configureMonologUsing(function($monolog) use ($app) {
$log = $app->make(Illuminate\Log\Writer::class);
$logglyHandler = new \Monolog\Handler\LogglyHandler(config('services.loggly.key'));
$logglyHandler->setTag(config('services.loggly.tag'));
if (config('app.env') == 'production')
{
// Push to Loggly and save local if in production
$log->getMonolog()->pushHandler($logglyHandler);
$log->useFiles(storage_path('/logs/laravel.log'));
}
else
{
// Otherwise, save only locally
$log->useFiles(storage_path('/logs/laravel.log'));
}
});
Um auf Hassan Beitrag zu erweitern (Entsendung als Antwort, als ich noch don‘ Ich habe genug Reputation, um einen Kommentar zu schreiben.
Wenn Sie eine Notwendigkeit, vor Ort die Tagebücher zu verwenden, können Sie folgenden Code verwenden:
$logFile = 'laravel'.'.txt';
$log->useDailyFiles(storage_path().'/logs/'.$logFile);
Natürlich Logfile Name völlig willkürlich ist.
laravel-YYYY-MM-DD.txt
Edit:: mit einem Upgrade auf 5.4 diese Zeile nicht mehr funktioniert: In diesem Beispiel Format als solche wird
$log = $app->make(Illuminate\Log\Writer::class);
Als Abhilfe können Sie Writer-Instanz erstellen können manuell, Einspritzung $ Monolog verfügbar von configureMonologUsing
Schließung:
$log = new Illuminate\Log\Writer($monolog);
Vielen Dank! Klappt wunderbar. – littlebridge
Einzige Sache hier, Sie werden nichts lokal mit dieser Konfiguration protokollieren. Jedes Protokoll wird zu Loggly verschoben. – littlebridge
ja, fühlen Sie sich frei, Antwort zu bearbeiten, um lokale Protokolle einzubeziehen –