サポート » 使い方全般 » エラーログ出力のたびに、ログファイルを上書きしたい

  • WordPressでエラーログを以下のように出力しました

    
    // wp-config.php
    if ( WP_DEBUG ) {
        // debug.log ファイルに記録 これでデフォルトでwp-content配下に出力されます。
        define( 'WP_DEBUG_LOG', true );
        // ブラウザ上に表示する
        define( 'WP_DEBUG_DISPLAY', true );
        // ブラウザ上に表示しない
        @ini_set( 'display_errors',0 );
    }
    

    この出力において、ブラウザの方は「そのときのエラー」だけが出ますよね。
    同じようにログファイル「debug.log」の方も「そのときのエラー」だけにしたいのです。

    ログファイルにはdate_default_timezone_set( 'UTC' );のおかげで時間が表示されるので、「そのときのエラー」と「以前のエラー」の見分けはつくっちゃつくのですが、そもそも「以前のエラー」は表示させない方が見やすいと思うためです。

    つまりエラーログ出力の直前にunlinkを書くなどの処理が必要になるのかと思うのですが、どこにどのように書いたらよろしいでしょうか?

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • こんにちは

    WordPress の該当の関数には unlink などを実行する余地が無いように見受けられます。

    https://github.com/WordPress/WordPress/blob/cc1c1b0b5dcd31810db6a4ba665fb5208d604e55/wp-includes/SimplePie/Misc.php#L153

    スレッド開始 mikazukimika

    (@mikazukimika)

    ありがとうございます。
    unlinkに限らず何か方法があればいいのですが…

    スレッド開始 mikazukimika

    (@mikazukimika)

    読み込みの最後に、以下の処理を実行するのはどうでしょうか?

    出力された「debug.log」を「new-debug.log」というファイルでコピーし、「debug.log」を削除しておく。

    こうすれば、エラーを見たいときは「new-debug.log」を見れば、「そのときのエラー」だけにできるのではと…

    (できるかわかりませんし、そもそもこのコードがわからないですが、もしいけそうであれば教えてくださいませ。)

    こんにちは

    set_error_handler() を使用するのはどうでしょうか?
    エラー処理をハンドルすることができます。

    例:

    set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
    	$error_log_file = @ini_get( 'error_log' );
    	// ここで削除
    	return false;
    } );
    スレッド開始 mikazukimika

    (@mikazukimika)

    @ishitaka

    情報ありがとうございます。専用の関数となるといけそうですね!
    と思い、早速以下の1234という流れで試したのですが、削除は起こりませんでした…

    1. 出力先を指定

    
    // wp-config.php
    define( 'WP_DEBUG', true ); 
    if ( WP_DEBUG ) {
    	$wp_content_dir = '/home/xs000000/xs000000.xsrv.jp/public_html/wp-content';
    	$log_file = $wp_content_dir . '/themes/test/mydebug.log';
    	define( 'WP_DEBUG_DISPLAY', false );
    	define( 'WP_DEBUG_LOG', $log_file );
    }
    

    2. 削除処理を追加

    
    // functions.php
    set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
    	$error_log_file = @ini_get( 'error_log' );
    	// ここで削除
    	unlink(WP_DEBUG_LOG);
    	return false;
    } );
    

    3. エラーログ出力

    
    // header.php
    error_log('log');
    

    4. 上記3の状態で2回読み込むと、以下がmydebug.logに出力され、削除でなく追記となったようです。

    
    [18-Jan-2021 00:43:02 Asia/Tokyo] log
    [18-Jan-2021 00:43:29 Asia/Tokyo] log
    
    

    下記コードではどうでしょうか?

    set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
    	$error_log_file = @ini_get( 'error_log' );
    	@unlink( $error_log_file );
    	return false;
    } );
    • この返信は1ヶ月、 1週前にishitakaが編集しました。
    スレッド開始 mikazukimika

    (@mikazukimika)

    ありがとうございます。
    ただ変化はなく、削除でなく追記され続けます…
    やっぱりできないのかなあ…なかなか悔しいですね。

    提示のコードで検証してみました。結果、問題なくログファイルを削除することができました。
    なぜ、削除されないのかちょっと分からないですね。すみません。m(__)m

    スレッド開始 mikazukimika

    (@mikazukimika)

    それは不思議ですね。キャッシュでもありませんし…
    ところで以下で$error_log_file = ファイル名が出力されないのですが、それもおかしいですよね?

    
    set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
    	$error_log_file = @ini_get( 'error_log' );
    	error_log('$error_log_file = ' . $error_log_file);
    	@unlink( $error_log_file );
    	return false;
    } );
    

    うーん。夜分にありがとうございました。
    引き続き調べてみて、何かわかしましたらまたご報告させて頂きます。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。