「monolog.yaml」の設定は、SymfonyフレームワークにおけるMonologのロギング設定を定義しています。
例えば、以下のように記述したときのそれぞれの意味についてメモしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
monolog: channels: ['sqs'] handlers: main: type: stream path: "%kernel.project_dir%/var/log/dev.log" level: debug channels: ["!event"] sqs: type: stream path: "%kernel.project_dir%/var/log/sqs.log" level: debug channels: ["sqs"] formatter: monolog.formatter.line |
設定内容
全体設定
1 2 |
monolog: channels: ['sqs'] |
– channels:
– これはロギングのチャンネルを定義します。ここでは「sqs」というチャンネルが指定されており、特定のログメッセージをこのチャンネルに関連付けることができます。チャンネルを使うことで、異なるログの出力先や処理を分けることが可能です。
ハンドラー設定
1 2 3 4 5 6 |
handlers: main: type: stream path: "%kernel.project_dir%/var/log/dev.log" level: debug channels: ["!event"] |
– main:
– type: 「stream」は、ログをファイルに書き込むためのハンドラーです。
– path: ログファイルの出力先を指定します。ここでは、プロジェクトの「var/log/dev.log」にログが書き込まれます。
– level: 「debug」は、デバッグレベル以上のすべてのログメッセージを記録することを意味します。これにより、デバッグ情報も含めた詳細なログが得られます。
– channels: [“!event”]は、「event」チャンネルのログを除外することを示しています。つまり、「event」チャンネルに関連するログはこのハンドラーでは処理されません。
1 2 3 4 5 6 |
sqs: type: stream path: "%kernel.project_dir%/var/log/sqs.log" level: debug channels: ["sqs"] formatter: monolog.formatter.line |
– sqs:
– type: 「stream」は、こちらもファイルにログを出力するためのハンドラーです。
– path: ログファイルの出力先を指定します。ここでは、「var/log/sqs.log」にログが書き込まれます。
– level: 「debug」は、デバッグレベル以上のすべてのログメッセージを記録することを意味します。
– channels: [“sqs”]は、このハンドラーが「sqs」チャンネルに関連するログメッセージのみを処理することを示しています。
– formatter: 「monolog.formatter.line」は、ログメッセージをタイムスタンプ、ログレベル、メッセージ、コンテキスト情報を見やすく出力します。
▼例
1 2 3 4 5 |
[2025-01-23 10:15:30] INFO > Starting bounce message processing [2025-01-23 10:15:31] INFO > Retrieved messages from SQS {"count":2} [2025-01-23 10:15:31] DEBUG > Processing message {"id":"msg123"} [2025-01-23 10:15:31] INFO > Message processed successfully {"id":"msg123"} [2025-01-23 10:15:32] ERROR > Message processing failed {"id":"msg124", "error":"Invalid format", "file":"BounceMessageProcessor.php:105"} |
まとめ
この設定により、「sqs」チャンネルに関連するログは「sqs.log」に記録され、他のログは「dev.log」に記録されます。また、「event」チャンネルのログは「main」ハンドラーでは無視されるため、特定のログの管理が容易になります。これにより、アプリケーションのロギングを効率的に行うことができます。
追記
type: streamとtype: rotating_fileの違い
1. type: stream
1 2 3 4 5 |
handlers: sqs: type: stream path: '%kernel.project_dir%/var/log/sqs.log' level: debug |
特徴:
– 単一のログファイルに継続的に書き込み
– ファイルサイズが無制限に増加
– ログローテーションは外部ツール(logrotateなど)に依存
– シンプルな設定
– メモリ使用量が少ない
2. type: rotating_file
1 2 3 4 5 6 7 8 |
handlers: sqs: type: rotating_file path: '%kernel.project_dir%/var/log/sqs.log' level: debug max_files: 14 filename_format: '{filename}-{date}' date_format: 'Y-m-d' |
特徴:
– 日付ごとに新しいファイルを作成
– 古いログファイルの自動削除(max_filesで制御)
– ファイル名のカスタマイズが可能
– Monolog自体でログローテーションを管理
– より詳細な設定が可能
使い分け
1. streamを選ぶ場合
– シンプルな要件の場合
– 既存のlogrotateを使用する場合
– 最小限のメモリ使用を重視する場合
2. rotating_fileを選ぶ場合
– 日付ごとのログ管理が必要な場合
– 自動的なログローテーションが必要な場合
– ログの保持期間を制御したい場合
– システム全体で統一的なログ管理をしたい場合
一般的には、本番環境ではrotating_fileの使用が推奨されます。ログの管理が容易になり、ディスク容量の管理も自動化できるためです。