EC-CUBEでのログ確認方法とデバッグ時のログ出力設定について解説します。トラブル発生時に適切なログを確認することで、問題解決がスムーズになります。
ログファイルの場所
EC-CUBEのログはvar/log/ディレクトリに出力されます。src/Eccube/Log/Logger.phpでアクセス元に応じてログファイルが分かれます。
var/log/
├── front.log # フロント画面のログ
├── admin.log # 管理画面のログ
└── site.log # その他(CLI等)のログ
src/Eccube/Log/Logger.phpの実装:
public function log($level, $message, array $context = [])
{
if ($this->context->isAdmin()) {
$this->adminLogger->log($level, $message, $context); // admin.log
} elseif ($this->context->isFront()) {
$this->frontLogger->log($level, $message, $context); // front.log
} else {
$this->logger->log($level, $message, $context); // site.log
}
}
ログ出力方法(グローバル関数)
EC-CUBEではsrc/Eccube/Resource/functions/log.phpで定義されたグローバル関数を使用します。
// 情報ログ
log_info(カート明細操作開始, [product_class_id => $productClassId]);
// エラーログ
log_error(決済処理でエラー発生, [order_id => $orderId, error => $e->getMessage()]);
// デバッグログ(開発時のみ出力)
log_debug(変数の中身, [data => $data]);
// 警告ログ
log_warning(在庫が少なくなっています, [product_id => $productId]);
実際の使用例(CartController.php:201):
log_info(カート明細操作開始, [operation => $operation, product_class_id => $productClassId]);
ログレベル
log.phpで提供される関数(PSR-3準拠):
log_emergency()– システム使用不能log_alert()– 即時対応が必要log_critical()– 致命的エラーlog_error()– エラーlog_warning()– 警告log_notice()– 注意log_info()– 情報log_debug()– デバッグ
プラグイン用ログ
プラグイン専用のログファイルに出力したい場合はlogs()関数を使用します。
// プラグイン専用チャンネルでログ出力
logs(plugin)->info(プラグイン処理開始);
デバッグログの有効化
app/config/eccube/packages/dev/monolog.ymlでログレベルを設定できます。本番環境ではprod/monolog.ymlを確認してください。
monolog:
handlers:
main:
type: fingers_crossed
action_level: error # errorレベル以上でログ出力
handler: buffered
開発時にdebugレベルも出力したい場合は.envでAPP_ENV=devに設定します。
ログのローテーション
app/config/eccube/packages/prod/monolog.ymlでmax_files: 60が設定されており、60日分のログが保持されます。
まとめ
EC-CUBEではlog_info()などのグローバル関数でログを出力するのが標準的です。トラブル時はvar/log/配下の該当ログファイルを確認しましょう。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー