LaravelのログをJsonで吐き出せる様にする方法、AWSのCloudWatchを使おう。
AWSCloudWatchでログを見やすくするため、Laravelのログをjsonで出力
この記事はこちらの記事を参考にしました。
こちらの記事では、ログフォーマットを変更する方法について記載されており。
そちらのコードの必要な部分だけを抜粋し、ログファイルをjsonに変更する方法を紹介します。
https://qiita.com/nuuuuume/items/a6bcf340c50f18cfb71c
前提:設定ファイルにjsonと書くだけでjsonになるんじゃないの。
様々なサイトを見てみましたがどうやらそういった設定はない様です。
ログをjsonで出力するには自分でログを整形する必要がある様です。
ちなみにLaravel ver 5.7です。
ログをjsonに変更する手順
今回触るファイルは大きく分けて3つです。
- config/logging.php <元からあるファイル
- app/Logging/CustomFormatterApply.php <作ってください
- app/Logging/LineExFormatter.php <作ってください
app/Logging/CustomFormatterApply.php
こちらのコードは参考にした記事のコードそのままですorz
CustomFormatterApply.php
<?php
namespace App\Logging;
use App\Logging\LineExFormatter;
class CustomFormatterApply {
public function __invoke($logging) {
$exFormatter = new LineExFormatter();
foreach ($logging->getHandlers() as $handler) {
$handler->setFormatter($exFormatter);
}
}
}
app/Logging/LineExFormatter.php
ここが実際にjsonに変換している部分です。
eval(\Psy\sh());などで$recordの内容を確認するとわかりますが。
エラーやメッセージが発生した時の情報全てがここに詰まってます。
<?php
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class LineExFormatter extends LineFormatter {
public function format($record) {
return json_encode($record);
}
}
config/logging.php
このファイルの中にある daily の部分にtapで作成したCLASSを配列で渡す
config/logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'tap' => [App\Logging\CustomFormatterApply::class],
'days' => 14,
],
確認してみましょう
適当なControllerの適当なアクションにコードを挿入
test.php
use Log;
Log::info('Test Log Show!!!!');
出力先は開発環境の中のこちら
file
storage/logs/laravel-2019-05-08.log
出力結果
無事json形式で出力されました。
result
{"message":"Test Log Show!!!!","context":[],"level":200,"level_name":"INFO","channel":"local","datetime":{"date":"2019-05-08 15:46:04.104462","timezone_type":3,"timezone":"Asia\/Tokyo"},"extra":[]}
Author And Source
この問題について(LaravelのログをJsonで吐き出せる様にする方法、AWSのCloudWatchを使おう。), 我々は、より多くの情報をここで見つけました https://qiita.com/rorensu2236/items/8b07b002c81a12c76964著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .