web-dev-qa-db-ja.com

WP_DEBUG_LOGのログファイルの場所を変更することは可能ですか?

私の開発環境ではWP_DEBUG_LOGを使用していますが、wp-contentディレクトリにdebug.logがあっても問題ありません。

何かをデバッグする必要があるときに本番環境でWP_DEBUGをオンにして、それでもログを使用したいのですが、それを私のWebルート以外の場所にリダイレクトしたい場合があります。これはWP_DEBUG_LOGを使用して可能ですか?

14
jjeaton

WP_DEBUG_LOGが行うことはすべて以下のとおりです。

ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );

ですから、プラグインやテーマの中でWP_DEBUG_LOGのログの場所を変更したいのなら、 webaware's answer が最善です。 wp-config.php内で変更したいだけであれば、define( 'WP_DEBUG_LOG', true );を上記の2行に置き換えて、ログファイルを好きな場所に変更できます。

17
jjeaton

そうです、もしあなたがプラグインやテーマのfunctions.phpにコードを追加するのなら:

if (defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
    ini_set( 'error_log', WP_CONTENT_DIR . '/debug.txt' );
}

編集:他の誰かが私にこれを行う必要性を提示したので、私は彼らが編集できる単純なプラグインにいくつかのコードを落としました。誰かがそれを望めばそれは Gist として利用可能です。

4
webaware

この質問に対する最後の回答が投稿されてからWordPressのコードが変更されたようです。これらの定数に関連する現在のwp_debug_mode()関数には、WP_DEBUG_LOGがtrueまたは1に等しいかどうかのテストが含まれます。この場合、他の人が説明したように動作します。

ただし、その定数を文字列(好みのファイルパス)に設定することもできます。ログはそこに出力されます。たとえば、一般公開されているWebコンテンツの場合は、ディレクトリ外のパスに設定できます。あなたはそれを機能させるためにファイルのパーミッションで遊ぶ必要があるかもしれません。

WordFenceセキュリティプラグインが私のデバッグログが/ wp-content /でアクセス可能である可能性があると文句を言っているので、私はこの答えを探しに来ました。

if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) { $log_path = WP_CONTENT_DIR . '/debug.log'; } elseif ( is_string( WP_DEBUG_LOG ) ) { $log_path = WP_DEBUG_LOG; } else { $log_path = false; }

1
David F. Carr

それはこの変更以来WPバージョン5.1およびそれ以降のためにもはやここに答えが本当ではないようです https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused -changes-in-5-1 /

デフォルトのWP_DEBUG_LOGを上書きしたい場合は、wp-content/debug.logをパスとして定義できます。次に例を示します。

define( 'WP_DEBUG_LOG', 'wp-content/uploads/debug.log' );
1
Carl Alberto

残念ながら、デフォルトのデバッグファイルの場所は変更できません。変更できるのは、MUエラーログの場所とPHPエラーログファイルの場所です。

$ds = DIRECTORY_SEPARATOR;
# DEBUG
define( 'WP_DEBUG',               true );
// file: ~/WP_CONTENT_DIR/debug.log
define( 'WP_DEBUG_LOG',           true );
define( 'WP_DEBUG_DISPLAY',       true );
define( 'SAVEQUERIES',            true );
# DEBUG: MU
define( 'DIEONDBERROR',           true );
define( 'ERRORLOGFILE',           WP_CONTENT_DIR.$ds.'logs'.$ds.'mu_error.log' );

@ini_set( 'log_errors',           'On' );
# PHP Error log location
@ini_set( 'error_log',            WP_CONTENT_DIR.$ds.'logs'.$ds.'php_error.log' );
0
kaiser