默认的Apache2日志格式是什么,这个默认值在哪里定义?

我查看了(快速阅读)Apache模块mod_log_config,但无法弄清楚Apache2的默认日志格式以及它在哪里定义。有什么想法吗?
请注意,这是关于什么的问题。

/etc/apache2/conf.d/other-vhosts-access-log

不是默认选项,而是全局选项。
3个回答

对于Ubuntu 16.04,你可以在这里找到全局配置文件:
/etc/apache2/apache2.conf

其中定义了一些LogFormat指令
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

这里是开箱即用的虚拟主机配置文件。
/etc/apache2/sites-available/000-default.conf

在里面,你会发现它声明:

CustomLog ${APACHE_LOG_DIR}/access.log combined

“combined” 别名指的是上述全局配置中的第二个 “LogFormat”:
"%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""

TransferLog语句的文档中明确指出:

这个指令与CustomLog指令具有完全相同的参数和效果,唯一的区别是它不允许显式地指定日志格式或根据条件记录请求。取而代之的是,日志格式由最近指定的不定义昵称的LogFormat指令确定。如果没有指定其他格式,则使用常见日志格式。

接下来是LogFormat语句:

默认值:LogFormat "%h %l %u %t \"%r\" %>s %b"

因此,如果给出一个没有任何LogFormat语句的TransferLog语句,则输出格式如上所述。
如果同时缺少TransferLog和LogFormat语句,则不会写入访问日志

谢谢,但我仍然无法阅读有关TransferLog默认值的任何内容。我的意思是,您是否在说,如果没有指定CustomLog,则TransferLog指令负责,即使它未指定?如果是这样,您从哪里读取?因为TransferLog没有定义默认部分。再次感谢。 - user58366
如果未定义TransferLog,则不会写入。 - H.-Dirk Schmitt

默认的LogFormat确实很好

Default: LogFormat "%h %l %u %t \"%r\" %>s %b"

但是Apache默认使用的日志格式(至少在Debian发行版上)是:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

2这在Ubuntu 16.04中有了微小的变化,从%b("响应大小(以字节为单位),不包括HTTP头。在CLF格式中,即当没有发送任何字节时,使用'-'而不是0。")变成了现在的%O("发送的字节数,包括头部。在极少数情况下可能为零,例如在请求发送响应之前被中止的情况下。您需要启用mod_logio才能使用此功能。")。 - Jeff Puckett