自定义Apache日志

时间:2013-08-25 22:59:55

标签: apache logging customization

我正在运行一个带有siginup / login进程的网站。我喜欢在用户注册或访问我的网站时插入用户ID。 我的apache access.log如下所示:

115.137.10.87 - - [26/Aug/2013:07:38:52 +0900] "GET /api/game/ HTTP/1.1" 200 1402 "-" "android-async-http/1.4.3 (http://loopj.com/android-async-http)"
115.137.10.87 - - [26/Aug/2013:07:38:59 +0900] "GET /api/premium/brand HTTP/1.1" 200 721 "-" "android-async-http/1.4.3 (http://loopj.com/android-async-http)"
115.137.10.87 - - [26/Aug/2013:07:38:59 +0900] "GET /api/brand/ HTTP/1.1" 200 2510 "-" "android-async-http/1.4.3 (http://loopj.com/android-async-http)"
115.137.10.87 - - [26/Aug/2013:07:39:00 +0900] "GET /api/game/ HTTP/1.1" 200 1402 "-" "android-async-http/1.4.3 (http://loopj.com/android-async-http)"

我可以清楚地看到从哪个IP地址发送了什么http请求。 但是,如果我将用户ID(例如$ userid)添加到此日志中,那将是非常好的日志,并且我将能够获得用于做出决定的良好统计信息。

如果有可能,有没有办法做到这一点? 任何建议都会非常感激。

日志将如下:

115.137.10.87 - - [26/Aug/2013:07:38:52 +0900] "***[USERID]*** GET /api/game/ HTTP/1.1" 200 1402 "-" "android-async-http/1.4.3 (http://loopj.com/android-async-http)"

1 个答案:

答案 0 :(得分:0)

如果您使用的是HTTP基本身份验证或摘要式身份验证,则用户名是从HTTP标头派生的,可以通过在apache配置中的%u指令中使用LogFormat插入到日志中。如果您的登录系统不包含标题中的用户名(可能),那么我所知道的唯一其他选项是以某种方式设置一个环境变量,然后Apache可以用%{FOOBAR}e写出来。见http://httpd.apache.org/docs/2.2/logs.html

否则,您可能最好从应用程序代码中编写自己的日志文件(或使用应用程序级日志库 - Log4j,或其他任何内容。)