ダッシュボードにdebug.logを表示・削除する方法

Cocoonカスタマイズ集
この記事は約5分で読めます。
記事内に広告が含まれています。

はじめに

WordPressで開発や運用を行っている際、トラブルシューティングのために生成されるdebug.logの中身を頻繁に確認する必要がある場面は少なくありません。
通常であれば、FTPクライアントを使用してサーバーへアクセスし、ファイルをダウンロードして確認するという手間が発生します。

しかし、管理画面から直接ログファイルの内容を確認でき、かつボタン一つでファイルを削除できる仕組みがあれば、作業効率は大幅に向上します。

この記事では、この方法について説明します。

この仕組みで対応できるのは、あくまで「ログファイルを確認して、エラーの兆候を把握する」といった初期段階の切り分けまでです。
管理画面そのものへアクセスできないような本格的なトラブルが発生した際には、サーバーへ直接アクセスするなどの適切な代替手段を併用する必要があります。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

// ダッシュボードウィジェットを追加
add_action('wp_dashboard_setup', function () {
  wp_add_dashboard_widget(
    'debug-log',
    'デバッグログ',
    'render_debug_log'
  );
});


/**
 * ダッシュボードにウィジェットを出力
 *
 * @return void
 */
if (!function_exists('render_debug_log')):
function render_debug_log() {
  $log_file = WP_CONTENT_DIR . '/debug.log';
  $log_url  = content_url('/debug.log');
  $nonce    = wp_create_nonce('debug_log_action');

  ?>
  <div class="debug-log">
    <?php if (file_exists($log_file)): ?>
      <iframe src="<?= esc_url($log_url); ?>" style="width: 100%; height: 200px; border: 1px solid #ccc;"></iframe>
    <?php else: ?>
      <p class="debug-log__message">現在、debug.logは存在しません。</p>
    <?php endif; ?>

    <button id="delete-log-btn" class="button button-primary debug-log__delete" data-nonce="<?= esc_attr($nonce); ?>">ログを削除</button>
  </div>

  <script>
  jQuery(function ($) {
    $("#delete-log-btn").on("click", function () {
      if (!confirm("本当にdebug.logを削除しますか?")) {
        return;
      }

      var $button = $(this);
      $button.prop('disabled', true);

      $.post(ajaxurl, {
        action: "delete_debug_log",
        debug_log_nonce: $button.data("nonce")
      }, function (response) {
        alert(response);
        location.reload();
      }).fail(function () {
        alert("通信に失敗しました。");
        $button.prop('disabled', false);
      });
    });
  });
  </script>
  <?php
}
endif;


// Ajaxアクションを追加
add_action('wp_ajax_delete_debug_log', function () {

  // nonceチェック
  if (!isset($_POST['debug_log_nonce']) || !wp_verify_nonce($_POST['debug_log_nonce'], 'debug_log_action')) {
    wp_die('セキュリティチェックに失敗しました。');
  }

  // 権限チェック
  if (!current_user_can('manage_options')) {
    wp_die('権限がありません。');
  }

  $log_file = WP_CONTENT_DIR . '/debug.log';

  if (!file_exists($log_file)) {
    wp_die('ファイルは既に存在しません。');
  }

  if (unlink($log_file)) {
    echo 'debug.logを削除しました。';
  } else {
    echo 'ファイルの削除に失敗しました。パーミッションを確認してください。';
  }

  wp_die();
});

さいごに

今回紹介した方法を使えば、普段のWordPress開発や運用において、わざわざFTPソフトやサーバーのファイルマネージャーを開かずに、管理画面上から直接デバッグログの確認と削除を行えるようになります。
開発効率が向上するだけでなく、トラブル発生時の初動対応も迅速になるはずです。
ぜひご自身の環境に合わせてカスタマイズし、より快適な開発環境を構築してみてください。

タイトルとURLをコピーしました