4

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

4

1 回答 1

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 标志不存在,因此在这里对您没有帮助。

于 2013-08-28T13:45:50.073 回答