it-swarm.com.de

Ist es möglich, den Speicherort der Protokolldatei für WP_DEBUG_LOG zu ändern?

Ich verwende WP_DEBUG_LOG in meiner Entwicklungsumgebung und habe keine Probleme damit, dass sich debug.log im Verzeichnis wp-content befindet.

Manchmal schalte ich WP_DEBUG in der Produktion ein, wenn ich etwas debuggen muss, und ich möchte das Protokoll weiterhin verwenden, möchte es jedoch zu etwas außerhalb meines Webstamms umleiten. Ist das mit WP_DEBUG_LOG möglich?

14
jjeaton

Es stellt sich heraus, dass WP_DEBUG_LOG nur Folgendes tut:

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

Wenn Sie also den Protokollspeicherort für WP_DEBUG_LOG in einem Plugin oder Thema ändern möchten, ist die Antwort von webaware am besten. Wenn Sie nur möchten, dass es innerhalb von wp-config.php geändert wird, können Sie define( 'WP_DEBUG_LOG', true ); durch die obigen 2 Zeilen ersetzen und die Protokolldatei an eine beliebige Stelle ändern.

17
jjeaton

Ja, wenn Sie einem Plugin oder der functions.php eines Themes Code hinzufügen, wie folgt:

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

Bearbeiten: Jemand anderes hat mir gerade die Notwendigkeit gezeigt, dies zu tun. Deshalb habe ich einen Code in ein einfaches Plugin eingefügt, das sie bearbeiten können. es ist als Gist verfügbar, wenn jemand es will.

4
webaware

Es sieht so aus, als ob sich der WordPress-Code geändert hat, seitdem die letzte Antwort auf diese Frage veröffentlicht wurde. Die aktuelle Funktion wp_debug_mode (), die sich auf diese Konstanten bezieht, enthält einen Test, ob WP_DEBUG_LOG gleich true oder 1 ist. In diesem Fall verhält sie sich so, wie es andere beschrieben haben.

Sie können diese Konstante jedoch auch auf einen String setzen - Ihren bevorzugten Dateipfad - und das Protokoll wird dort ausgegeben. Beispielsweise können Sie einen Pfad außerhalb Ihrer Verzeichnisse für öffentlich zugängliche Webinhalte festlegen. Möglicherweise müssen Sie mit Dateiberechtigungen spielen, damit dies funktioniert.

Nach dieser Antwort habe ich gesucht, weil sich das WordFence-Sicherheits-Plugin darüber beschwert, dass in/wp-content/möglicherweise auf mein Debug-Protokoll zugegriffen werden kann.

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

Es scheint, dass die hier gegebenen Antworten für WP Version 5.1 und höher seit dieser Änderung nicht mehr zutreffen https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused -Änderungen-in-5-1/

Sie können jetzt WP_DEBUG_LOG als Pfad definieren, wenn Sie den Standard-wp-content/debug.log überschreiben möchten, zum Beispiel:

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

Afaik, Sie können den Speicherort für die Standard-Debug-Datei nicht ändern. Sie können den Speicherort für das MU-Fehlerprotokoll sowie den Speicherort für die Fehlerprotokolldatei PHP ändern.

$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