У меня проблема с WordPress, и я хочу просто записать сообщения журнала в текстовый файл. Я знаю, что error_log
существует, но хочу иметь более отдельный файл журнала для разных сообщений.
Я использую wp_filesystem->put_contents
, и он выполняет запись в файл и успешно, , но выводит ТОЛЬКО данные последнего вызова .
У меня есть следующий метод:
public static function log_message($msg) {
error_log($msg);
require_once(ABSPATH . 'wp-admin/includes/file.php');
global $wp_filesystem;
if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ){
$creds = request_filesystem_credentials( site_url() );
wp_filesystem($creds);
}
$bt = debug_backtrace();
$caller = array_shift($bt);
$logStr = date("Y-m-d hh:ii A",time())." - ".$caller['file'].":".$caller['line']." - ".$msg;
$filePathStr = SRC_DIR.DIRECTORY_SEPARATOR.$logFileName;
$success = $wp_filesystem->put_contents(
$filePathStr,
$logStr,
FS_CHMOD_FILE // predefined mode settings for WP files
);
if(!$success) {
error_log("Writing to file \"".$filePathStr."\" failed.");
} else {
error_log("Writing to file \"".$filePathStr."\" succeeded.");
}
}
Я звоню, используя:
log_message("\nTest 1");
log_message("\nTest 2");
log_message("\nTest 3");
Вывод ВСЕГДА ТОЛЬКО Test 3
, при этом другие вызовы пока игнорируются, их вывод появляется в debug.log, а также во всех сообщениях об успехе.
С чего бы это?
Глядя на WPCodex для исходного кода, он использует fwrite
за кулисами. Файл закрыт в этом коде, и я не могу использовать какую-либо технику "сброса".
Есть ли способ выяснить это?