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

18

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?

jjeaton
quelle

Antworten:

18

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 Speicherort des Protokolls 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 geändert wird wp-config.php, können Sie es durch define( 'WP_DEBUG_LOG', true );die obigen 2 Zeilen ersetzen und die Protokolldatei an eine beliebige Stelle ändern.

jjeaton
quelle
Ein paar Jahre später, und ich kann nicht scheinen, die Datei mit Fehlern zu füllen, es sei denn, es ist im WordPress-Inhaltsordner.
Mike Kormendy
4

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 anders hat mich gerade darauf hingewiesen, dass ich dies tun muss. Ich habe also Code in ein einfaches Plug-in eingefügt, das von ihm bearbeitet werden kann. Es ist als Kern verfügbar, wenn jemand es will.

webaware
quelle
Ich habe versucht, dies zu meiner wp-config.php-Datei hinzuzufügen und es funktioniert nicht. Liegt das daran, dass die Datei wp-config.php möglicherweise früher als die tatsächliche Stelle im Code geladen wird, an der WP_DEBUG_LOG zum Definieren der Protokolldatei verwendet wird?
JJeaton
1
Ich konnte dies zum Laufen bringen, indem ich es in ein Mu-Plugin einbaute. Kann ich diese Änderung trotzdem in wp-config vornehmen? Ich gehe davon aus, ich müsste nur WP_DEBUG_LOG auf false setzen und ersetzen, was es selbst macht?
JJeaton
1
Dies funktioniert gut, wenn Sie den Code in ein Plugin oder Theme einfügen können, danke!
JJeaton
Ja, entleere es einfach in ein einfaches Plugin. Siehe Schreiben eines Plugins im Codex.
webaware
1

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.

Ich habe nach dieser Antwort 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; }

David F. Carr
quelle
0

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 PHP-Fehlerprotokolldatei ä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' );
Kaiser
quelle
Ich müsste also WP_DEBUG_LOG deaktivieren, um sicherzustellen, dass die Datei debug.log niemals in meinem Verzeichnis wp-content erstellt wird.
JJeaton
1
Sie stellen für diesen Tag und diese Zeit einige Fragen :) Ich bin nicht in der Verfassung, um diese Fragen jetzt zu beantworten. Komm morgen zurück und springe in den Chat.
Kaiser