Skip to content

ADM-014 デバッグログ管理画面 ​

概要 ​

  • WordPress の debug.log をサーバーへ SSH 接続せずに確認できるようにするための管理画面。
  • 管理画面内で 最新ログの閲覧 / キーワード絞り込み / ファイルダウンロード / ローテーション を提供する。
  • サイズが閾値(100MB)を超えた場合は警告を表示する。
  • ツールメニュー配下のサブメニューとして登録する。

ワイヤーフレーム ​

画面仕様 ​

ブロック一覧 ​

ブロックIDブロック名表示内容初期値ユーザー操作アクション
B-1状態表示ファイル存在、最終更新時刻、サイズ、総行数を表示。画面表示時に取得した最新状態。--
B-2フィルタキーワード、日付範囲、表示件数を入力するフォーム。キーワード空、期間未指定、100件。値を入力し、適用またはリセットする。REQ-001
B-3操作再読込ボタン、ダウンロードボタン、ローテーションボタン。常に表示。ボタン押下でログ再取得・DL・ローテーションを実行。REQ-002/3/4
B-4ログ表示領域1行単位のログ表示(ページング対応)。最新100行。スクロールして内容確認、ページ移動を行う。REQ-001
B-5注意事項権限・機密情報・エスケープに関する注意文言。常に表示。--

処理連携仕様 ​

アクション一覧 ​

A-1 ​

画面初期表示、B-2(フィルタ)適用、B-4(ページング)操作時に REQ-001: デバッグログ取得・表示 を呼び出す。

  • フィルタ条件に基づいて debug.log を読み込み、表示対象行を返却する。
  • 返却する本文はプレーンテキスト扱いで HTML エスケープして描画する。
  • 大容量ファイル対策として、検索モードを以下の 2 種とする。
    • 高速モード(既定): 末尾 N 行のみを検索対象とする(結果は部分一致)。
    • 完全検索モード: ファイル全体を検索対象とする(結果は完全一致、処理時間増)。
  • モード切替条件:
    • 画面初期表示時および再読込時は高速モード。
    • キーワードまたは期間フィルタを指定した場合は、利用者が明示的に「完全検索」を選択したときのみ完全検索モードを使用する。
    • UI 上で「高速(末尾 N 行)/ 完全(全体)」の切替を表示し、既定は高速とする。
  • 日付判定ルール:
    • from_date は当日 00:00:00 以上(含む)。
    • to_date は当日 23:59:59 以下(含む)。
    • 判定タイムゾーンは Asia/Tokyo(入力日時は同タイムゾーンへ正規化して評価)。
    • 実装で UTC 比較が必要な場合は、上記で正規化した日時を UTC に変換して比較する。

リクエスト

requestParam本画面の値(どの部品から何を送るか)
keywordB-2 のキーワード入力値
from_dateB-2 の開始日入力値(任意)
to_dateB-2 の終了日入力値(任意)
limitB-2 の表示件数(50/100/200 など)
pageB-4 のページング状態
_wpnonceログ表示操作用 nonce
search_modetail(高速)/ full(完全検索)

レスポンス

項目内容
成功時フィルタ条件に一致するログ行、最新状態情報、ページ情報を返却する。
失敗時権限不足 / nonce 不正 / ログ未存在の管理者向けメッセージを返却する。
画面更新時の処理画面全体再描画で B-1(状態表示)と B-4(ログ表示領域)を更新する。

A-2 ​

B-3(最新を再読込)押下時に REQ-002: デバッグログ再読込 を呼び出す。

  • 現在のフィルタ条件(keyword / from_date / to_date / limit / page / search_mode)を引き継いで A-1 を再実行する。

リクエスト

requestParam本画面の値(どの部品から何を送るか)
reloadB-3 の再読込ボタン押下フラグ(固定値)
keywordB-2 のキーワード入力値(現在値を引き継ぐ)
from_dateB-2 の開始日入力値(現在値を引き継ぐ)
to_dateB-2 の終了日入力値(現在値を引き継ぐ)
limitB-2 の表示件数(現在値を引き継ぐ)
pageB-4 のページング状態(現在値を引き継ぐ)
search_modetail(高速)/ full(完全検索)の現在値を引き継ぐ
_wpnonce再読込操作用 nonce

レスポンス

項目内容
成功時最新ログ状態とログ本文を返却する。
失敗時権限不足 / nonce 不正 / ログ未存在の管理者向けメッセージを返却する。
画面更新時の処理画面全体再描画で B-1(状態表示)と B-4(ログ表示領域)を最新状態へ更新。

A-3 ​

B-3(debug.log をダウンロード)押下時に REQ-003: デバッグログダウンロード を呼び出す。

  • debug.log を text/plain でダウンロードさせる。
  • manage_options 権限と nonce を必須とする。

リクエスト

requestParam本画面の値(どの部品から何を送るか)
downloadB-3 のダウンロードボタン押下フラグ(固定値)
_wpnonceダウンロード操作用 nonce

レスポンス

項目内容
成功時text/plain で debug.log ファイルを返却し、ブラウザ保存を開始する。
失敗時権限不足 / nonce 不正 / ログ未存在の管理者向けメッセージを返却する。
画面更新時の処理ダウンロード処理のため画面本文更新は行わない。

外部インターフェース ​

管理画面 URL ​

項目値
URL/wp-admin/tools.php?page=debug-log-viewer
メニュー名デバッグログ
権限manage_options

一覧 URL のクエリ ​

再読込・ダウンロード・ページングのリンクはいずれも build_page_url() が組み立てる。

クエリ内容既定値
page画面スラッグ(固定)-
keywordB-2 のキーワード(URL エンコード)空
exclude_keywordsB-2 の除外キーワード(URL エンコード)codoc
from_dateB-2 の開始日空
to_dateB-2 の終了日空
limit表示件数(50/100/200)100
pagedページ番号(1 以上)1
search_modetail(高速)/ full(完全検索)tail
sort_ordernewest / oldestnewest
log_levels[]絞り込むログレベル。選択数だけ同じキーを繰り返す指定なし

リダイレクト後クエリ(通知) ​

クエリ内容
debug_log_success1 成功、0 失敗
debug_log_notice表示文言(URL エンコード)

通知はフィルタ条件と同じ URL に載るため、build_page_url() に追加クエリとして渡して一度に組み立てる。

一覧 URL のエンコード ​

add_query_arg() は値をエンコードしないため、build_page_url() は AdminQueryUrl 経由で渡された生値を 1 回だけエンコードする(通知の debug_log_notice も同じ扱い)。生値のままだと & や # を含むキーワードで検索したときに条件や文言が途中で切れる。

log_levels[] は PHP の配列でキーを重複できないため、AdminQueryUrl が同じキーを繰り返して並べる。受け取り側の parse_str() は log_levels[0]= 形式と同じ配列に戻すため互換性がある。

既知の制約: 受け取り側の sanitize_text_field() は % + 16 進 2 桁を削除するため、A%2Bb のような検索語は往復で値が変わる。

参照ファイル ​

項目値
既定対象/wp-content/debug.log
条件WP_DEBUG_LOG が有効(true またはログファイルパス文字列)で、解決先ファイルが存在すること
エラー時表示「ログファイルが存在しません」等の管理者向けメッセージを表示

外部 API エラーの記録方針 ​

debug.log はこの画面からダウンロードできるため、外部 API(X / Gemini / xAI Grok 等)の HTTP エラー時にレスポンス本文の全文は記録しない(Issue #3868)。ExternalApiErrorLogFormatter が次の形式で 1 行にまとめる。

  • 通常: HTTP <status> summary="<JSON の error message 等(マスク済み・200 文字まで)>" body_len=<バイト数> body_sha256=<先頭 12 桁>
  • 調査時のみ: wp-config.php で define( 'SLOT_KOURYAKU_LOG_EXTERNAL_API_BODY', true ); を設定すると、末尾に body=<本文> を追記する。本文は改行を潰し、Bearer トークン・API キーらしき値・メールアドレス・32 文字以上の英数字列を *** に置き換え、1000 文字で切り詰める。調査が終わったら定数を外す。