エラーカスタムページ

致命的なエラーや例外が発生した際に、サポート問い合わせ用のUUID追跡機能付きのユーザーフレンドリーなページを表示します。

error_page
2,553 sites
20
drupal.org

インストール

Drupal 10, 9 v2.0.3
composer require 'drupal/error_page:^2.0'

概要

Error custom pagesモジュールは、例外や致命的なエラーが発生した際に、Drupal coreの素朴なエラーページをカスタマイズ可能なユーザーフレンドリーなページに置き換えます。各エラーにはUUID(Universally Unique Identifier)がタグ付けされ、ユーザーがサポートに連絡する際に特定のエラーを参照できます。UUIDはDrupalのwatchdogとPHPエラーログにも記録され、簡単にデバッグできます。

一般的なDrupalモジュールとは異なり、このモジュールはDrupalの設定管理システムの代わりにsettings.phpを使用して設定を行います。この設計は意図的なものです:キャッチされない例外が発生した場合、Drupalのサービス(設定ファクトリを含む)が利用できない可能性があります。settings.phpに依存することで、Drupalコンテナが壊れているか利用できない場合でも、モジュールは機能し続けることができます。

このモジュールは、エラーページとメッセージ用のカスタマイズ可能なHTMLテンプレートを提供します。Twigレンダリングエンジンは Drupalサービスを必要とするため、モジュールは変数トークン置換を伴うシンプルな静的HTMLファイルを使用します。これらのテンプレートは、パブリックWebアクセスから保護しながらコピーしてカスタマイズできます。

Features

  • 例外や致命的なエラーが発生した際に、Drupal coreの素朴なエラー出力の代わりにユーザーフレンドリーなエラーページを表示
  • 各エラー/例外に対して一意のUUIDを生成し、ユーザーに表示してサポート参照用にログに記録
  • エラーページ(error_page.html)とエラーメッセージ(error_message.html)用のカスタマイズ可能なHTMLテンプレートを提供
  • UUID参照付きでDrupalのデータベースログ(watchdog)とPHPエラーログの両方にエラーを記録
  • Drupalサービスが利用できない場合でも機能を確保するために、Drupal設定システムの代わりにsettings.php設定を使用
  • PHPのerror_log()関数設定を介したカスタムエラーログ出力先をサポート
  • .htaccessセキュリティルールでマークアップテンプレートをパブリックアクセスから保護
  • Drupal 10およびDrupal 11と互換性あり

Use Cases

本番サイトのエラーハンドリング

本番サイトでDrupalの技術的なエラーメッセージをユーザーフレンドリーなページに置き換えます。ユーザーにはサポートに連絡する際に参照できるUUID付きの丁寧なメッセージが表示され、開発者はログでUUIDを検索して正確なエラー詳細を見つけることができます。

サポートチケットの関連付け

ユーザーがヘルプデスクにエラーを報告する際、エラーページに表示されたUUIDを提供できます。サポートスタッフはそのUUIDでDrupalのデータベースログ(dblog)またはPHPエラーログを検索し、正確なエラー、スタックトレース、コンテキストを素早く特定できます。

ブランド化されたエラーページ

エラーページテンプレートをサイトのブランディングに合わせてカスタマイズできます。error_page.htmlとerror_message.htmlを安全なディレクトリにコピーし、サイトのロゴ、CSS、メッセージを追加して、template_dir設定でカスタムテンプレートを使用するように設定します。

カスタムエラーログ出力先

監視や外部ログシステムとの統合のために、エラーログを特定のファイルにルーティングします。ログメソッド3と出力先パスを設定して、すべてのエラーを専用のログファイルに収集します。

Tips

  • カスタムテンプレートはWebルートの外に配置するか、.htaccessで保護して直接的なパブリックアクセスを防止してください
  • 開発中は詳細なエラーログを使用して($config['system.logging']['error_level'] = 'verbose')、エラーページで完全なバックトレースを確認できます
  • テンプレートの{{ error_report }}変数は、Drupalのログ設定でエラー表示が無効になっている場合は空になります
  • error_page_testサブモジュールを有効化して($settings['extension_discovery_scan_tests'] = TRUEが必要)、/error_page_test/exception、/error_page_test/fatal_error、/error_page_test/user_error、/error_page_test/php_noticeで異なるエラータイプをテストできます
  • このモジュールは冗長性のために、重大なエラーをDrupalのデータベースログとPHPのエラーログの両方に記録します

Technical Details

Troubleshooting 4
エラーページがまだDrupal coreのデフォルトエラーページを表示している

settings.phpファイルにset_error_handler()とset_exception_handler()の両方の呼び出しを追加していることを確認してください。このモジュールはsettings.phpでエラーハンドラを明示的に登録する必要があります。

ErrorPageErrorHandlerのクラスが見つからないエラー

Composerによるオートローディングを使用していない場合は、settings.phpのset_error_handler呼び出しの前にこの行を追加してください: require_once 'modules/contrib/error_page/src/ErrorPageErrorHandler.php'; Composerユーザーはclassmapオートロードエントリによってこれが自動的に行われます。

UUIDがエラーメッセージに表示されない

settings.phpで$settings['error_page']['uuid']が明示的にFALSEに設定されていないことを確認してください。デフォルトはTRUEですが、無効化されている可能性があります。

カスタムテンプレートが使用されていない

$settings['error_page']['template_dir']が正しいディレクトリを指していること、およびテンプレートファイルが正確にerror_page.htmlとerror_message.htmlという名前であることを確認してください。ディレクトリパスは絶対パスまたはDRUPAL_ROOTからの相対パスである必要があります。

Security Notes 4
  • 本番サイトでは$settings['extension_discovery_scan_tests']を有効にしないでください。テストモジュールの検出が許可されてしまいます
  • カスタムテンプレートディレクトリは、.htaccessを使用するかWebルートの外に配置して、パブリックWebアクセスから保護する必要があります
  • このモジュールはフルパス開示を防ぐために、エラーメッセージ内のファイルパスからDRUPAL_ROOTを自動的に削除します(OWASPセキュリティベストプラクティス)
  • デフォルトのmarkup/ディレクトリには、テンプレートファイルへのすべてのパブリックアクセスを拒否する.htaccessファイルが含まれています