我试图通过在我的.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并查看我的logs目录以查看创建的内容,我会看到一个空白的xyzerrors.log和一个带有启动消息的error.log文件(“启动线程以侦听端口80等等) )。
知道为什么会发生这种情况,或者就如何解决这个问题提出建议?清楚地创建了xyzerrors.log文件,所以看起来我的文件路径和“ErrorLog”的拼写以及我的vhost配置和所有明显的部分应该是正确的。但它正在写入我的httpd.conf中指定的文件,如果我理解正确,它应该只是备份位置,如果.vhost中没有指定的那个。我想知道权限是否可能是一个问题(也许它没有对它创建的xyzerror.log的写访问权,所以它写入了error.log而不是?),但两个文件都在同一个目录中。我错过了另一个配置文件吗?
我通过重命名.conf ErrorLog并删除.vhost ErrorLog来验证发生了什么,并再次看到创建.vhost日志并创建和写入.conf日志。我有类似的设置在Linux上运行没有问题。
更新:这是另一篇文章。我正在修复lxml的问题(我收到错误,安装了它的新版本,然后重新启动了apache),并注意到我的xyzerror.log中出现了一些消息。这是它的样子:
error.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:
如果我继续浏览我的网站并查看日志文件,我会看到日志最终会被写入我的vhost位置的xyzerror.log(以及xyzaccess.log)。只有初始启动消息(“侦听端口...”等)和一个与站点相关的错误都在conf位置。
任何人都可以解释或建议解决方案吗?
Apache 2.2 / Windows 7 / Django 1.5 / Python 2.7
答案 0 :(得分:1)
如果我理解正确,应该只是备份位置,如果没有.vhost中指定的那个
完全没有!
这是正常行为,因为ErrorLog
指令可以全局应用,也可以应用于声明它的VirtualHost
。
想一想。当针对apache内部事件(例如启动事件或模块加载失败)向错误日志报告错误时,如何使用特定虚拟主机的错误日志,因为甚至无法实现虚拟主机解析?
Apache知道只有在客户端发出请求时才使用哪个虚拟主机,并且通过IP解析或主机名解析确定请求是指引用特定虚拟主机。
因此,只有那些错误才会出现在特定于vhost的错误日志中,例如与该虚拟主机有关的PHP错误或HTTP错误(如401或404代码)。