Где PHP хранит журнал ошибок?
Я арендовал виртуальный хостинг и использую Cpanel, Apache, PHP, который работает под управлением fastcgi. Где PHP хранит журнал ошибок?
Есть ли другой способ найти журнал ошибок в среде общего хостинга вместо того, чтобы просматривать всю структуру сайта в поисках файлов error_log?
У меня есть доступ к php.ini (я использую PHP версии 5.2.16).
Ответ 1
PHP сохраняет журналы ошибок в папке /var/log/apache2, если PHP является модулем apache2. Общие хосты часто хранят файлы журналов в подпапке корневого каталога /log . Но , если у вас есть доступ к php.ini файлу, вы можете сделать это:
error_log = /var/log/php-scripts.log
Если вы используете cPanel, главный файл журнала, который вы, вероятно, ищете, хранится (по умолчанию) в:
/usr/local/apache/logs/error_log
Если ничего не помогает, вы можете проверить расположение файла журнала, используя:
Ответ 2
В Linux:
php —info | grep error
Терминал выведет местоположение журнала ошибок.
В Windows:
php —info | findstr /r /c:»error_log»
Командная строка выведет местоположение журнала ошибок.
Чтобы установить местоположение журнала:
Откройте php.ini и добавьте следующую строку:
error_log = /log/myCustomLog.log
Ответ 3
В среде LAMP ошибки php по умолчанию направляются в этот файл:
/var/log/httpd/error_log
Все журналы доступа находятся здесь:
/var/log/httpd/access_log
Ответ 4
Как найти журнал ошибок PHP в Linux:
eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log
/var/log/httpd/error_log
Альтернативный способ:
eric@dev /home/eric $ sudo find / -name «error_log» 2>/dev/null
/var/log/httpd/error_log
Ответ 5
Необходимо использовать абсолютный путь при установке переменной error_log в вашем файле php.ini, иначе журналы ошибок будут сохраняться в соответствии с вашим относительным путем.
error_log = /var/log/php.errors
Другое решение — написать простой скрипт, который будет перечислять все файлы журналов ошибок из дерева каталогов.
Ответ 6
- ищите файлы php.ini. в locate php.ini ;
- ищите в этих файлах error_reporting значение;
- проверяйте error_log значение, чтобы убедиться, что оно указывает на реальное место и не закомментировано.
Ответ 7
Лучше всего заглянуть в файл httpd.conf и посмотреть, что установлено по умолчанию. Он также может быть отменен вашим конкретным виртуальным хостом. Я начинаю с просмотра /etc/httpd/conf/httpd.conf и ли /etc/apache2/httpd.conf и ищу error_log. Он может быть указан как /var/log/httpd/error_log или /var/log/apache2/error_log как logs/error_log .
В этом случае это будет относительный путь, который означает, что он будет указывать на /etc/httpd/logs/error_log . Если вы все еще не можете его найти, посмотрите на конечную часть файла httpd.conf и посмотрите, где включены ваши виртуальные хосты. Он может находиться в /etc/httpd/conf.d/
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Как посмотреть информацию об ошибке 500 и логи ошибок PHP
Ошибка 500 (Internal Server Error) означает какую-то неполадку в работе PHP-скриптов. Более подробную информацию о неполадке нужно смотреть в логе ошибок PHP. Это можно сделать несколькими способами.
Способ 1: приложение «Логи»
- Установите в «Инсталлере» бесплатное приложение «Логи».
- В настройках приложения включите логирование ошибок PHP в файл php.log.
- Повторите действие, которое заканчивается ошибкой.
- Посмотрите, какие новые записи добавились в лог-файл php.log.

Способ 2: файл .htaccess
Время от времени удаляйте большие лог-файлы, которые давно не обновлялись. Старые сообщения об ошибках почти никогда не пригодятся, но будут напрасно занимать дисковое пространство сервера.
-
Добавьте команды в конце файла .htaccess, если ваш веб-сервер поддерживает такие команды:
php_flag display_errors Off php_value error_reporting 2147483647 php_flag log_errors On php_value error_log ./wa-log/php.log
Кроме файла php.log, полезную информацию о неполадках можно получить и из других лог-файлов. Самыми полезными обычно бывают те файлы, которые обновлялись недавно.
2 комментария
+1
Александр Ищенко 3 апреля 2019 09:31 #
Сделал ка вы прописали результат Неизвестное поле code code 500
## wa-system/database/waModel.class.php(942) #0 wa-system/database/waModel.class.php(999): waModel->getWhereByField(‘code’, Array) #1 wa-apps/shop/plugins/carts/lib/actions/report/shopCartsPluginReportCleanDb.controller.php(27): waModel->deleteByField(‘code’, Array) #2 wa-system/controller/waController.class.php(21): shopCartsPluginReportCleanDbController->execute() #3 wa-system/controller/waJsonController.class.php(28): waController->run(NULL) #4 wa-system/controller/waFrontController.class.php(254): waJsonController->run(NULL) #5 wa-system/controller/waFrontController.class.php(189): waFrontController->runController(Object(shopCartsPluginReportCleanDbController), NULL) #6 wa-system/controller/waFrontController.class.php(83): waFrontController->execute(‘carts’, ‘report’, ‘cleanDb’) #7 wa-system/waSystem.class.php(582): waFrontController->dispatch() #8 wa-system/waSystem.class.php(501): waSystem->dispatchBackend(‘webasyst/shop/’) #9 index.php(7): waSystem->dispatch() #10
array( 'plugin' => 'carts', 'module' => 'report', 'action' => 'cleanDb', )
array( 'days' => '10', '_csrf' => '[hidden]', )
error_log
Отправляет сообщение об ошибке в лог веб-сервера или в пользовательский файл.
Список параметров
Сообщение об ошибке, которое должно быть логировано.
Определяет куда отправлять ошибку. Возможны следующие значения:
| 0 | Сообщение message отправляется в системный регистратор PHP, используя механизм логирования операционной системы, или файл, в зависимости от значения директивы error_log в конфигурационном файле. Это значение по умолчанию. |
| 1 | Сообщение message отправляется электронной почтой на адрес, установленный в параметре destination . Это единственный тип сообщения, где используется четвёртый параметр additional_headers . |
| 2 | Больше не используется. |
| 3 | message применяется к указанному в destination файлу. Перенос строки автоматически не добавляется в конец message . |
| 4 | Сообщение message отправляется напрямую в обработчик логера SAPI. |
Назначение. Устанавливается в зависимости от параметра message_type .
Дополнительные заголовки. Используется, когда значение параметра message_type — 1 . Данный тип сообщения использует ту же внутреннюю функцию, что и mail() .
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки. Если message_type равен нулю, функция всегда возвращает true , независимо от того, может ли ошибка логироваться или нет.
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | Параметр destination и additional_headers теперь допускают значение null. |
Примеры
Пример #1 Примеры использования error_log()
// Отправляет уведомление посредством серверного лога, если мы не можем
// подключиться к базе данных.
if (! Ora_Logon ( $username , $password )) error_log ( «База данных Oracle недоступна!» , 0 );
>
?php
// Уведомить администратора по электронной почте, если невозможно выделить ресурсы для FOO
if (!( $foo = allocate_new_foo ())) error_log ( «Большая проблема, мы выпали из FOO!» , 1 ,
«operator@example.com» );
>
// другой способ вызвать error_log():
error_log ( «Вы ошиблись!» , 3 , «/var/tmp/my-errors.log» );
?>
Примечания
Внимание
error_log() не является бинарно-безопасной функцией. message обрезается по null-символу.
Подсказка
message не должен содержать null-символ. Учтите, что message может передаваться в файл, по почте, в syslog и т.д. Используйте подходящую преобразующую или экранирующую функцию, base64_encode() , rawurlencode() или addslashes() перед вызовом error_log() .
User Contributed Notes 21 notes
13 years ago
Advice to novices: This function works great along with «tail» which is a unix command to watch a log file live. There are versions of Tail for Windows too, like Tail for Win32 or Kiwi Log Viewer.
Using both error_log() and tail to view the php_error.log you can debug code without having to worry so much about printing debug messages to the screen and who they might be seen by.
Further Note: This works even better when you have two monitors setup. One for your browser and IDE and the other for viewing the log files update live as you go.
5 years ago
DO NOT try to output TOO LARGE texts in the error_log();
I had this problem when I tried to debug a response from a wp_remote_get(); all of my error_log() worked as they should, except for ONE of them. (-_-)
After about a day of debugging I finally found out why & that’s why I type this.
Apparently the response contained a body with over 1.6 million chars (or bytes? (whatever strlen() returns)).
If you have a string of unknown length, use this:
$start_index = 0;
$end_index = 8000;
error_log( substr( $output_text , $start_index , $end_index ) );
13 years ago
There is a limit on the maximum length that you can pass as the $message.
The default seem to be 1024 but can be changed by adjusting the value of the runtime configuration value of ‘log_errors_max_len’.
17 years ago
Beware! If multiple scripts share the same log file, but run as different users, whichever script logs an error first owns the file, and calls to error_log() run as a different user will fail *silently*!
Nothing more frustrating than trying to figure out why all your error_log calls aren’t actually writing, than to find it was due to a *silent* permission denied error!
15 years ago
Be carefull. Unexpected PHP dies when 2GByte of file log reached (on systems having upper file size limit).
A work aorund is rotate logs 🙂
18 years ago
It appears that the system log = stderr if you are running PHP from the command line, and that often stderr = stdout. This means that if you are using a custom error to both display the error and log it to syslog, then a command-line user will see the same error reported twice.
4 years ago
Relative paths are accepted as the destination of message_type 3, but beware that the root directory is determined by the context of the call to error_log(), which can change, so that one instance of error_log () in your code can lead to the creation of multiple log files in different locations.
In a WordPress context, the root directory will be the site’s root in many cases, but it will be /wp-admin/ for AJAX calls, and a plugin’s directory in other cases. If you want all your output to go to one file, use an absolute path.
15 years ago
«It appears that the system log = stderr if you are running PHP from the command line»
Actually, it seems that PHP logs to stderr if it can’t write to the log file. Command line PHP falls back to stderr because the log file is (usually) only writable by the webserver.
16 years ago
Note that since typical email is unencrypted, sending data about your errors over email using this function could be considered a security risk. How much of a risk it is depends on how much and what type of information you are sending, but the mere act of sending an email when something happens (even if it cannot be read) could itself imply to a sophisticated hacker observing your site over time that they have managed to cause an error.
Of course, security through obscurity is the weakest kind of security, as most open source supporters will agree. This is just something that you should keep in mind.
And of course, whatever you do, make sure that such emails don’t contain sensitive user data.
20 years ago
when using error_log to send email, not all elements of an extra_headers string are handled the same way. «From: » and «Reply-To: » header values will replace the default header values. «Subject: » header values won’t: they are *added* to the mail header but don’t replace the default, leading to mail messages with two Subject fields.
error_log ( «sometext» , 1 , «zigzag@my.domain» ,
«Subject: Foo\nFrom: Rizzlas@my.domain\n» );
?>
—————%To: zigzag@my.domain
Envelope-to: zigzag@my.domain
Date: Fri, 28 Mar 2003 13:29:02 -0500
From: Rizzlas@my.domain
Subject: PHP error_log message
Subject: Foo
Delivery-date: Fri, 28 Mar 2003 13:29:03 -0500
quoth the docs: «This message type uses the same internal function as mail() does.»
mail() will also fail to set a Subject field based on extra_header data — instead it takes a seperate argument to specify a «Subject: » string.
php v.4.2.3, SunOS 5.8
15 years ago
When logging to apache on windows, both error_log and also trigger_error result in an apache status of error on the front of the message. This is bad if all you want to do is log information. However you can simply log to stderr however you will have to do all message assembly:
LogToApache($Message) $stderr = fopen(‘php://stderr’, ‘w’);
fwrite($stderr,$Message);
fclose($stderr);
>
3 years ago
You can easily filter messages sent to error_log() using «tail» and «grep» on *nix systems. This makes monitoring debug messages easy to see during development.
Be sure to «tag» your error message with a unique string so you can filter it using «grep»:
error_log(«DevSys1 — FirstName: $FirstName — LastName: $Lastname»);
On your command line:
tail -f /var/log/httpd/error_log | grep DevSys1
In this example, we pipe apache log output to grep (STDIN) which filters it for you only showing messages that contain «DevSys1».
The «-f» option means «follow» which streams all new log entries to your terminal or to any piped command that follows, in this case «grep».
17 years ago
Another trick to post «HTML» mail body. Just add «Content-Type: text/html; charset=ISO-8859-1» into extra_header string. Of course you can set charset according to your country or Env or content.
EG: Error_log(«
stuff
«,1,»eat@joe.com»,»subject :lunch\nContent-Type: text/html; charset=ISO-8859-1″);
1 month ago
// Pretty function to log info
function logger ( $log , $clear = true ) file_put_contents ( ‘/path/log/logger.log’ , ( is_object ( $log ) || is_array ( $log ) || is_resource ( $log ) ? json_encode ( $log , JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) : $log ), (! $clear ) ? FILE_APPEND : 0 );
>
18 years ago
In the case of missing your entries in the error_log file:
When you use error_log in a script that does not produce any output, which means that you cannot see anything during the execution of the script, and when you wonder why there are no error_log entries produced in your error_log file, the reasons can be:
— you did not configure error_log output in php.ini
— the script has a syntax error and did therefore not execute
15 years ago
//Multiline error log class
// ersin güvenç 2008 eguvenc@gmail.com
//For break use «\n» instead ‘\n’
?php>
Class log <
//
const USER_ERROR_DIR = ‘/home/site/error_log/Site_User_errors.log’ ;
const GENERAL_ERROR_DIR = ‘/home/site/error_log/Site_General_errors.log’ ;
/*
User Errors.
*/
public function user ( $msg , $username )
<
$date = date ( ‘d.m.Y h:i:s’ );
$log = $msg . » | Date: » . $date . » | User: » . $username . «\n» ;
error_log ( $log , 3 , self :: USER_ERROR_DIR );
>
/*
General Errors.
*/
public function general ( $msg )
<
$date = date ( ‘d.m.Y h:i:s’ );
$log = $msg . » | Date: » . $date . «\n» ;
error_log ( $msg . » | Tarih: » . $date , 3 , self :: GENERAL_ERROR_DIR );
>
$log = new log ();
$log -> user ( $msg , $username ); //use for user errors
//$log->general($msg); //use for general errors
?>
14 years ago
If you have a problem with log file permission *silently*
it’s best to leave error_log directive unset so errors will be written in your Apache log file for current VirtualHost.
3 years ago
Depending on the error, you may also want to add an error 500 header, and a message for the user:
$message = ‘Description of the error.’;
error_log($message);
header($_SERVER[‘SERVER_PROTOCOL’] . ‘ 500 Internal Server Error’, true, 500);
exit($message);
18 years ago
It appears that error_log() only logs the first line of multi-line log messages. To log a multi-line message, either log each line individually or write the message to another file.
5 years ago
When error_log() unexpectedly uses stdout, you should check if the php.ini value for error_log is empty in your CLI environment. Something as simple as this might restore expected behavior:
14 years ago
After scouring the internet for getting event logging to
work in syslog on Windows 2003, I found the following
from this post and was able to successfully get Windows
Event Viewer to log PHP errors/notices:
1. Copy the PHP 5 binaries to «C:\php».
2. Right-click My Computer and select Properties to bring
up the Computer Properties dialog. Switch to the Advanced
tab and click Environment Variables. Find the system
environment variable PATH, edit it and add «;C:\php»
(without the quotes) to the end.
3. Make sure that the configuration file «php.ini» resides
in the directory «C:\php» and contains the correct path
settings.
4. DELETE any old «php.ini» files from «C:\WINDOWS»
and other directories.
5. Open REGEDIT, navigate to the key
«HKLM\SOFTWARE\PHP» and DELETE the string value
«IniFilePath» from there. It is outdated and no longer
necessary!
6. Modify NTFS security permissions of the directory
«C:\php» to give Read and Execute permissions to (1) the
IIS Guest Account and (2) the group IIS_WPG.
7. Modify NTFS security permissions of the directories
«C:\php\session» and «C:\php\upload» to give additional
Modify permissions to (1) the IIS Guest Account and (2)
the group IIS_WPG.
8. Navigate to the registry key
«HKLM\SYSTEM\CurrentControlSet\Services\Eventlog
\Application» and edit the value «CustomSD» there. Find
the substring «(D;;0xf0007;;;BG)» which Denies access to
the application event log for Builtin Guest accounts (like
the IIS Web User account) and replace this substring with
«(A;;0x3;;;BG)» which allows read and write access. Please
pay attention to leave the rest of the security string intact.
Damaging this value can have dangerous effects!
9. Create or update the registry key
«HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application\
PHP-5.2.0″ (adapt the last to your version part
if necessary) with the following values:
* «EventMessageFile» (REG_EXPAND_SZ) = «C:\php\php5ts.dll»
* «TypesSupported» (REG_DWORD) = 7
- Функции обработки ошибок
- debug_backtrace
- debug_print_backtrace
- error_clear_last
- error_get_last
- error_log
- error_reporting
- restore_error_handler
- restore_exception_handler
- set_error_handler
- set_exception_handler
- trigger_error
- user_error
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Where are PHP Errors Logged?


So when we encounter errors in our code, where exactly can we find them? At a high level, there are really only three places where PHP errors can be found: inline with program execution, in the system log, or in error monitoring tools like Rollbar.
Inline errors
By default, whenever an error or exception is thrown, PHP sends the error message directly to the user via STDOUT. In a command-line environment, this means that errors are rendered in the terminal. In a web environment, errors and exceptions get displayed directly in the browser.
While this behavior is useful for debugging problems in a development environment, it should be disabled in a production environment for security reasons. To do this, open up the PHP configuration file for the environment you are working in—typically found in a path that looks like /etc/php/:environment:/php.ini—and change the display_errors directive to Off.
; This directive controls whether or not and where PHP will output errors, ; notices and warnings too. Error output is very useful during development, but ; it could be very dangerous in production environments. Depending on the code ; which is triggering the error, sensitive information could potentially leak ; out of your application such as database usernames and passwords or worse. ; For production environments, we recommend logging errors rather than ; sending them to STDOUT. ; Possible Values: ; Off = Do not display any errors ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) ; On or stdout = Display errors to STDOUT ; Default Value: On ; Development Value: On ; Production Value: Off ; http://php.net/display-errors display_errors = OnLog files
While rendering errors to STDOUT is great for debugging issues in a development environment as they happen, it isn’t very useful in a production environment. This is where the error log comes into play. By default, PHP doesn’t log any errors, which means that this value must be explicitly set. To do so, open up the same PHP configuration file referenced above in your favorite editor and find the error_log directive.
; Log errors to specified file. PHP's default behavior is to leave this value ; empty. ; http://php.net/error-log ; Example: ;error_log = php_errors.log ; Log errors to syslog (Event Log on Windows). error_log = syslogThere are two possible values for error_log: a custom log file and the syslog. If the syslog is used, then all PHP errors will be sent directly to the default system log file—in Linux, this is typically /var/log/syslog. The more manageable method is to use a custom log file. By doing this, you can isolate your PHP application’s logs from the rest of the system logs, which can make debugging issues significantly easier.
Logging in Laravel
While PHP’s default system logger is useful for bespoke applications, it is important to note that many application frameworks provide their own built-in logging mechanisms. A great example of this is the Laravel framework. In Laravel, the logging method can be changed within the log option of the application configuration file—found in config/app.php.
/* |-------------------------------------------------------------------------- | Logging Configuration |-------------------------------------------------------------------------- | | Here you may configure the log settings for your application. Out of | the box, Laravel uses the Monolog PHP logging library. This gives | you a variety of powerful log handlers / formatters to utilize. | | Available Settings: "single", "daily", "syslog", "errorlog" | */ 'log' => env('APP_LOG', 'single'),By default, Laravel maintains a single log file at storage/logs/laravel.log within the project directory, rather than the defined error_log option from the global PHP configuration.
Logging in Symfony
Because Laravel is built on top of Symfony, they share the same core logging mechanism—although the configuration differs between the two frameworks. Logging in Symfony and Laravel are both done using Monolog, a third-party PHP logging library that can be used to create and store logs in a large number of ways.
By default, Symfony logs are stored in var/log/dev.log and var/log/prod.log within the project directory, depending on the environment, but these defaults can be changed in the Monolog package configuration file found at config/packages/monolog.php.
$container->loadFromExtension('monolog', array( 'handlers' => array( 'file_log' => array( 'type' => 'stream', 'path' => '%kernel.logs_dir%/%kernel.environment%.log', 'level' => 'debug', ), 'syslog_handler' => array( 'type' => 'syslog', 'level' => 'error', ), ), ));What do PHP logs look like?
So, what exactly do PHP logs look like? In most instances, PHP logs follow a fairly predictable format:
Dec 10 04:04:38 scotchbox apache2: PHP Parse error: syntax error, unexpected end of file in /var/www/public/index2.php on line 4In a nutshell, the log line above can be broken up into four parts: the date, the hostname, the process, and the error message. Whenever an error is encountered or an uncaught exception is thrown, the error message is printed along with the date, hostname, and process metadata to help pinpoint what happened, where it happened, and when it happened.
A primer on log levels
It is important to note that, in PHP, there are a handful of log levels that can be squashed or raised. While these log levels are determined by PHP itself, understanding what they are and mean is a crucial step towards being able to diagnose problems as they happen.
When display_errors is set to On, it can be useful to explicitly hide and show specific log levels so you can focus on one task at a time, such as critical errors, or cleaning up warnings. This can be accomplished using the built-in error_reporting method.
// Report simple running errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // Report all errors except E_NOTICE error_reporting(E_ALL & ~E_NOTICE);This method accepts an integer value that tells PHP which errors to display, and which ones to ignore. Through the use of bitwise operators (| meaning OR, & meaning AND, and ~ meaning NOT), we can clearly and easily define which errors we want to see.
Here are a few of the most common log levels. For more information about log levels (there are quite a few of them), take a look at PHP’s official documentation.
Error Level Description E_ERROR Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted. E_WARNINIG Run-time warnings (non-fatal errors). Execution of the script is not halted. E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser. E_NOTICE Run-time notices. These indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script. How to Throw Exceptions in Flutter
