0

我试图通过在我的 .vhost 中指定它来覆盖我的 httpd.conf 文件中的 ErrorLog 位置,但它只创建文件并且仍在写入 .conf 文件。

我的 httpd.conf 文件中有以下内容:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog "logs/error.log"

# Virtual hosts
Include conf/vhosts/xyz_apache.vhost

然后我在我的 xyz_apache.vhost 文件中有这个(在一行上):

ErrorLog  "C:/Program Files (x86)/Apache Software Foundation/
           Apache2.2/logs/xyzerrors.log"

如果我启动 apache 并查看我的日志目录以查看创建的内容,我会看到一个空白 xyzerrors.log 和一个 error.log 文件,其中包含启动消息(“启动线程以侦听端口 80 等)。

知道为什么会发生这种情况,或者关于如何解决它的建议?xyzerrors.log 文件已明确创建,因此我的文件路径和“ErrorLog”的拼写以及我的虚拟主机配置和所有明显的部分似乎都应该是正确的。但它正在写入我的 httpd.conf 中指定的文件,如果我理解正确,它应该只是备份位置,如果 .vhost 中没有指定的话。我想知道权限是否可能是一个问题(也许它没有对它创建的 xyzerror.log 的写访问权限,所以它改为写入 error.log ?),但两个文件都在同一个目录中。我错过了另一个配置吗?

我通过重命名 .conf ErrorLog 并删除 .vhost ErrorLog 来验证发生了什么,并再次看到创建了 .vhost 日志以及创建并写入了 .conf 日志。我在 Linux 中运行了类似的设置,没有任何问题。

更新:这是另一件。我正在修复 lxml 的一个问题(我遇到了一个错误,安装了它的新版本,然后重新启动了 apache),并注意到我的 xyzerror.log 中出现了几条消息。这是它的样子:

错误日志

[Wed Oct 09 09:14:52 2013] [notice] Child 42900: Starting thread to listen on port 80.
[Wed Oct 09 09:48:11 2013] [error] ERROR:django.request:Internal Server Error: /admin/
[Wed Oct 09 09:48:11 2013] [error] Traceback (most recent call last):
[Wed Oct 09 09:48:11 2013] [error] ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed. (Rest of traceback omitted)
[Wed Oct 09 09:54:50 2013] [notice] Parent: Received shutdown signal -- Shutting down the server.
Apache server interrupted...
Apache server interrupted...
Apache server interrupted...
Apache server interrupted...
Apache server interrupted...
Released the start mutex
[Wed Oct 09 09:54:52 2013] [notice] Child 42900: All worker threads have exited.
[Wed Oct 09 09:54:52 2013] [notice] Child 42900: Child process is exiting
[Wed Oct 09 09:54:52 2013] [notice] Parent: Child process exited successfully.
[Wed Oct 09 09:54:53 2013] [warn] mod_wsgi: Compiled for Python/2.7.
[Wed Oct 09 09:54:53 2013] [warn] mod_wsgi: Runtime using Python/2.7.2.
[Wed Oct 09 09:54:53 2013] [notice] Apache/2.2.22 (Win32) mod_wsgi/3.3 Python/2.7.2 configured -- resuming normal operations
[Wed Oct 09 09:54:53 2013] [notice] Server built: Jan 28 2012 11:16:39
[Wed Oct 09 09:54:53 2013] [notice] Parent: Created child process 40284
[Wed Oct 09 09:54:53 2013] [warn] mod_wsgi: Compiled for Python/2.7.
[Wed Oct 09 09:54:53 2013] [warn] mod_wsgi: Runtime using Python/2.7.2.
[Wed Oct 09 09:54:53 2013] [notice] Child 40284: Child process is running
[Wed Oct 09 09:54:53 2013] [notice] Child 40284: Acquired the start mutex.
[Wed Oct 09 09:54:53 2013] [notice] Child 40284: Starting 64 worker threads.
[Wed Oct 09 09:54:53 2013] [notice] Child 40284: Starting thread to listen on port 80.

xyzerror.log

[Wed Oct 09 09:47:54 2013] [info] [client 127.0.0.1] mod_wsgi (pid=42900, process='', application='XYZ.sysname.mydomain.local|'): Loading WSGI script 'C:/Users/etc/etc/XYZ_wsgi.py'.
[Wed Oct 09 09:48:11 2013] [error] [client 127.0.0.1] client denied by server configuration: C:/Users/etc/etc/site_media

所以也许这些不是 ErrorLog 消息,我需要调查我的 CustomLog 设置?我看到了与这些类似的行为(正在写入 xyzaccess.log 文件,但正在写入 .conf 中的 access.log),但为简单起见,我没有在此处包含它。

更新 2:

如果我继续浏览我的站点并查看日志文件,我会看到日志最终被写入我的虚拟主机位置的 xyzerror.log(和 xyzaccess.log)。只有初始启动消息(“正在侦听端口……”等)和一个与站点相关的错误位于 conf 位置。

任何人都可以解释或提出解决方案吗?

Apache 2.2/Windows 7/Django 1.5/Python 2.7

4

1 回答 1

1

如果我理解正确,应该只是备份位置,应该没有在 .vhost 中指定

一点也不 !

这是正常行为,因为该ErrorLog指令可以全局应用,也可以应用到VirtualHost它被声明的地方。

想想看。当 apache 内部事件(例如启动事件或模块加载失败)向错误日志报告错误时,它如何使用特定虚拟主机的错误日志,因为虚拟主机解析甚至不可能?

Apache 仅在客户端发出请求并且通过 IP 解析或主机名解析将请求标识为引用特定虚拟主机时才知道使用哪个虚拟主机。

因此,只有那些错误才会出现在您的 vhost 特定错误日志中,例如与该 vhost 相关的 PHP 错误,或 HTTP 错误(例如 401 或 404 代码)。

于 2013-10-11T14:20:43.180 回答