带有日志文件的Apache Alias

时间:2013-08-28 13:31:37

标签: apache

大家好我想知道是否可以在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个别名上创建一个访问和错误日​​志。

1 个答案:

答案 0 :(得分:1)

使用文件名是不可能的,因为指令ErrorLogTransferLog都是服务器或虚拟主机级别,因此无法为特定别名指定。

但是,您可以通过使用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标志出乎意料地不存在,所以它没有帮助对你来说。