如何在Apache conf文件中设置PHP错误日志位置?

e_i*_*_pi 6 php apache config

我们有一个在子域上运行的开箱即用的PHP应用程序,它在其DocumentRoot中记录错误:

/var/www/appname/path/to/document/root/php-errors.log
Run Code Online (Sandbox Code Playgroud)

...而不是我们想要的错误日志:

/var/www/appname/logs/php-errors.log
Run Code Online (Sandbox Code Playgroud)

由于我不想更改开箱即用的应用程序中的代码,并且我不想更改所有子域的错误日志位置(读取:php.ini),我该怎么做只是与子域相关的Apache conf文件?

mka*_*man 8

来自:每个虚拟主机的error_log?

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)


e_i*_*_pi 6

对于那些希望使用php-fpm(我本来打算发布此信息)的人,这里是您的操作方法:

确保您以root用户身份登录,或sudo用于所有命令。

使用以下命令进入您的php-fpm目录*:

cd /etc/php/fpm/
Run Code Online (Sandbox Code Playgroud)

在该目录中,编辑php.ini文件,并将以下内容添加到末尾:

如果要按主机设置错误日志

[HOST=www.example.com]
error_log=/var/www/myapplication/path/to/my/error.log

[HOST=sub.example.com]
error_log=/var/www/mysubapplication/path/to/my/error.log
Run Code Online (Sandbox Code Playgroud)

如果您想按路径设置错误日志 (如果您使用的是IP地址但没有域的服务器,则非常方便)

[PATH=/var/www/myapplication]
error_log=/var/www/myapplication/path/to/my/error.log

[PATH=/var/www/mysubapplication]
error_log=/var/www/mysubapplication/path/to/my/error.log
Run Code Online (Sandbox Code Playgroud)

现在,您需要使用以下命令进入池目录*:

cd /etc/php/fpm/pool.d/
Run Code Online (Sandbox Code Playgroud)

在该目录中,编辑文件www.conf。请注意该文件中user和的值group,它们的现成设置都是www-data针对这两个文件的。查找该术语catch_workers_output并确保其未注释并设置为yes,如下所示:

catch_workers_output = yes
Run Code Online (Sandbox Code Playgroud)

现在,您需要创建错误日志文件,并确保php-fpm可以访问它。这就是为什么您需要记录上一个文件编辑的值user以及group来自上一个文件编辑的值的原因。为您在编辑时设置的每个HOST / PATH创建一个错误日志文件,并为其php.ini赋予适当的权限和所有权,例如:

touch /var/www/myapplication/path/to/my/error.log
chmod 0660 /var/www/myapplication/path/to/my/error.log
chown www-data:www-data /var/www/myapplication/path/to/my/error.log
Run Code Online (Sandbox Code Playgroud)

最后,使用以下命令**重新启动php-fpm服务:

service php-fpm restart
Run Code Online (Sandbox Code Playgroud)

* 注意:如果像我一样安装php-fpm的声明版本,则目录路径将更改为(例如)以下内容:

/etc/php/5.6/fpm/
/etc/php/5.6/fpm/pool.d/

/etc/php/7.1/fpm/
/etc/php/7.1/fpm/pool.d/
Run Code Online (Sandbox Code Playgroud)

** 如果您安装了声明的版本,则该服务采用特定的版本名称,并且您将需要使用(例如)以下内容:

service php5.6-fpm restart

service php7.1-fpm restart
Run Code Online (Sandbox Code Playgroud)