Apache 错误日志格式:如何找到当前格式?

Apache 错误日志格式:如何找到当前格式?

我正在用 PHP 构建一个日志解析器,但遇到了 apache 错误日志格式的问题。使用访问日志,很容易看到LogFormatapache 配置文件中的默认设置,然后检查我的虚拟主机是否有任何自定义设置。

但是通过错误日志,我在 apache 配置中找不到任何内容,并且ErrorLogFormat在任何地方都没有自定义指令。

我之所以要检查它,是因为文档让我很困惑。以下是一些ErrorLogFormat来自的指令示例Apache 文档

#Simple example
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"
#Example (similar to the 2.2.x format)
ErrorLogFormat "[%t] [%l] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
#Example (default format for threaded MPMs)
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"

下面是我在自己的服务器(apache 2.4)上看到的两个日志行示例:

[Sun Sep 27 07:45:01.899495 2020] [ssl:error] [pid 23080] AH01941: stapling_renew_response: responder error
[Wed Sep 30 20:56:31.065219 2020] [reqtimeout:info] [pid 7079] [client x.x.x.x:59452] AH01382: Request header read timeout

这部分%F: %E: [client %a](即:fileName、errorCode、clientIP),(或者至少%E: [client %a],我找不到任何带有文件名的示例)似乎是.如果我认为我自己的解析器是,那么它就能够捕获上面两行日志中的错误代码(AH01941和)。AH01382ErrorLogFormat[%{u}t] [%-m:%l] [pid %P] [client %a] %F: %E: %M

但是如果我按照文档并设置:[%{u}t] [%-m:%l] [pid %P] %F: %E: [client %a] %M,那么第二行(带有客户端IP)将没有,并且有一条包含错误代码的errorCode消息( ) :。%MAH01382: Request header read timeout

那么我如何/在哪里可以获取当前信息ErrorLogFormat

答案1

实际上没有默认的 ErrorLogFormat,但有一个函数可以完成这项工作:do_errorlog_defaulthttps://github.com/apache/httpd/blob/trunk/server/log.c#L881

文档举个例子:

#Example (default format for threaded MPMs)
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"

默认的 ErrorLog 日期/时间格式如下:

[Mon Aug 28 18:38:46.123456 2023]

可以用这个 ErrorLogFormat 字符串重现

ErrorLogFormat "[%{u}t]"

以及其他带有此 LogFormat 字符串的内容:

LogFormat "[%{%a %b %d %T}t.%{usec_frac}t %{%Y}t]"

再举一个例子,紧凑的 ErrorLog 数据/时间字符串如下

[2023-08-28 18:38:46.123456]

可以用这个 ErrorLogFormat 字符串重现

ErrorLogFormat "[%{cu}t]"

以及其他带有此 LogFormat 字符串的内容:

LogFormat "[%{%F %T}t.%{usec_frac}t]"

相关内容