大家好我想知道是否可以在Apache的虚拟主机上创建一个带有日志的别名?
这是我到目前为止所做的:
<VirtualHost www.mycompany.com>
ServerName www.mycompany.com
DirectoryIndex Company_Home.html
ServerAdmin siasagenbag@mycompany.com
DocumentRoot C:/Project/Sites/Company/Main/htdocs
ErrorLog C:/Project/Sites/Company/Main/logs/Error_log.log
TransferLog C:/Project/Sites/Company/Main/logs/Access_log.log
Alias /public C:/Project/Sites/Company/Sub/Public/htdocs/Public.html
Alias /stage C:/Project/Sites/Company/Sub/Stage/htdocs/Stage.html
Alias /development C:/Project/Sites/Company/Sub/Development/htdocs/Development.html
我想在所有3个别名上创建一个访问和错误日志。
答案 0 :(得分:1)
使用文件名是不可能的,因为指令ErrorLog
和TransferLog
都是服务器或虚拟主机级别,因此无法为特定别名指定。
但是,您可以通过使用apache将日志传送到的进程来获得所需的行为,例如:
ErrorLog |C:/Project/Sites/Company/error_logger.exe
TransferLog |C:/Project/Sites/Company/transfer_logger.exe
每个程序都将由apache启动,并将在其标准输入上接收日志行。您可以在程序中随意使用这些字符串。
这里要解决的主要问题是强制日志格式包含别名信息,以便程序可以将正确的日志行重定向到相应的文件。
TransferLog很容易获得此信息,因为它将作为记录URL的前导部分(日志格式中的%U标志)。
对于错误日志,它要困难得多,甚至可能是不可能的,因为PHP等各种模块都会生成完全没有任何URL信息的错误消息。
修改强>
为了记录,Apache 2.3.9引入了一个新的指令ErrorLogFormat,允许大量自定义错误日志行,但是,%U标志出乎意料地不存在,所以它没有帮助对你来说。