Czy można zmienić lokalizację pliku dziennika dla WP_DEBUG_LOG?


18

Używam WP_DEBUG_LOG w moim środowisku programistycznym i nie mam problemów z tym, że debug.log znajduje się w katalogu wp-content.

Czasami włączam WP_DEBUG podczas produkcji, gdy muszę coś debugować i nadal chcę korzystać z dziennika, ale chciałbym przekierować go na coś poza moim katalogiem głównym. Czy jest to możliwe przy użyciu WP_DEBUG_LOG?

Odpowiedzi:


19

Okazuje się, że wszystko, co robi WP_DEBUG_LOG, to:

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

Jeśli więc chcesz zmienić lokalizację dziennika WP_DEBUG_LOG we wtyczce lub motywie, odpowiedź webaware jest najlepsza. Jeśli chcesz po prostu to zmienić w środku wp-config.php, możesz zastąpić define( 'WP_DEBUG_LOG', true );powyższymi 2 liniami i zmienić plik dziennika na dowolne.


Kilka lat później i wydaje się, że nie mogę zapełnić pliku błędami, chyba że znajduje się on w folderze zawartości wordpress.
Mike Kormendy

@MikeKormendy - może to być problem z uprawnieniami do katalogu. Lokalizacja, w której chcesz zapisać plik, musi być zapisywalna przez użytkownika będącego właścicielem procesu dla php runnera. Mówiąc najprościej, upewnij się, że miejsce docelowe nowego pliku ma takie same uprawnienia jak obecnie folder wp-content.
Michael Teter,


4

Tak, jeśli dodasz kod do wtyczki lub funkcji motywu. Php:

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

Edycja: ktoś inny przedstawił mi potrzebę zrobienia tego, więc umieściłem trochę kodu w prostej wtyczce, którą można edytować; jest dostępny jako podstawa, jeśli ktoś tego chce.


Próbowałem dodać to do mojego pliku wp-config.php i to nie działa. Czy to dlatego, że wp-config.php może być ładowane wcześniej niż rzeczywiste miejsce w kodzie, w którym WP_DEBUG_LOG jest używany do zdefiniowania pliku dziennika?
jjeaton

1
Udało mi się to uruchomić, dodając go do wtyczki mu. Czy mogę w ogóle dokonać tej zmiany w ramach wp-config? Zakładam, że musiałbym po prostu ustawić WP_DEBUG_LOG na false i zastąpić to, co robi sam?
jjeaton

1
Działa to dobrze, jeśli możesz wstawić kod do wtyczki lub motywu, dzięki!
jjeaton

Tak, po prostu zrzuć go do prostej wtyczki. Zobacz Pisanie wtyczki na kodeksie.
webware

1

Wygląda na to, że kod WordPress zmienił się od czasu opublikowania ostatniej odpowiedzi na to pytanie. Bieżąca funkcja wp_debug_mode () związana z tymi stałymi obejmuje test, czy WP_DEBUG_LOG jest równy true, czy 1 - w takim przypadku zachowuje się tak, jak inni to opisali.

Można jednak również ustawić tę stałą na ciąg znaków - preferowaną ścieżkę do pliku - i dziennik zostanie tam wydrukowany. Na przykład możesz ustawić ścieżkę poza katalogami dla publicznie dostępnych treści internetowych. Być może będziesz musiał grać z uprawnieniami do plików, aby to zadziałało.

Przyszedłem szukać tej odpowiedzi, ponieważ wtyczka bezpieczeństwa WordFence skarży się, że mój dziennik debugowania jest potencjalnie dostępny w / 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; }


0

Afaik, nie możesz zmienić lokalizacji domyślnego pliku debugowania. Możesz zmienić lokalizację dziennika błędów MU, a także lokalizację pliku dziennika błędów 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' );

Więc musiałbym wyłączyć WP_DEBUG_LOG, aby mieć pewność, że plik debug.log nigdy nie zostanie utworzony w moim katalogu treści?
jjeaton

1
Zadajesz całkiem sporo pytań na ten dzień i czas :) Nie jestem w stanie mózgu, aby na nie teraz odpowiedzieć. Wróć jutro i wskocz na czat.
kaiser

0

Czasy się zmieniają, podobnie jak poprawne odpowiedzi na pytania techniczne.

Aktualna odpowiedź z końca 2019 r. Jest prosta. Podczas definiowania „stałej” WP_DEBUG_LOG w wp-config.php, możesz teraz podać ścieżkę, w której chcesz zapisać plik.

define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );

Zobacz dokumentację wsparcia Wordpress

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.