在 Ubuntu 上,PHP 日志格式主要取决于你用的是哪种 PHP 运行方式(CLI / PHP-FPM / Apache mod_php),以及你想记录到哪(文件、syslog、error_log)。下面按常见场景说明。
编辑 php.ini(路径取决于运行方式):
# PHP-FPM
/etc/php/8.1/fpm/php.ini
# CLI
/etc/php/8.1/cli/php.ini
设置:
log_errors = On
error_log = /var/log/php/php-error.log
⚠️ PHP 本身不支持自定义 error_log 的“格式”,格式是固定的:
[日期] PHP 错误类型: 错误信息 in 文件 on 行
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s
格式示例:
[时间戳] [pool www] pid 12345
script_filename = /var/www/index.php
[0.xxx] function_name()
access.log = /var/log/php-fpm/access.log
access.format = "%R - %u %t \"%m %r\" %s"
常用变量:
%t 时间%m 方法%r 请求%s 状态码%D 耗时Apache 控制日志格式:
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
PHP 错误会写入 Apache error.log,格式由 Apache 决定。
CLI 一般:
display_errors = On
log_errors = Off
或指定:
error_log = /var/log/php/cli-error.log
PHP 不支持像 Nginx 那样定义格式,但你可以:
error_log(sprintf(
"[%s] USER=%s IP=%s MSG=%s\n",
date('Y-m-d H:i:s'),
$user,
$_SERVER['REMOTE_ADDR'],
$msg
), 3, '/var/log/php/app.log');
composer require monolog/monolog
$log = new Monolog\Logger('app');
$log->pushHandler(new Monolog\Handler\StreamHandler(
'/var/log/php/app.log',
Monolog\Logger::INFO
));
$log->info('user login', [
'ip' => $_SERVER['REMOTE_ADDR']
]);
可定义 JSON / 行格式。
sudo mkdir -p /var/log/php
sudo chown -R www-data:adm /var/log/php
| 场景 | 是否可自定义格式 |
|---|---|
| PHP error_log | ❌ 固定格式 |
| PHP-FPM access.log | ✅ 可定义 |
| Apache error.log | ❌ Apache 决定 |
| 业务日志 | ✅ 用 Monolog |
如果你能告诉我:
我可以给你一套直接可抄的配置。