在典型的访问日志中存储什么?

时间:2011-06-13 13:40:49

标签: access-log

我想到了以下几点:

  • 用户ID(如果有)
  • 用户IP地址
  • 时间戳
  • 已执行的行动

我错过了什么吗?有没有指导方针?

2 个答案:

答案 0 :(得分:1)

如果您打算使用访问日志来收集AWStats或Webalizer等工具的统计信息,则应使用指南。

例如,组合日志格式

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

在Apache中定义为:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

此格式通常在网络上使用,大多数软件都能理解。

W3C定义了另一种称为扩展日志文件格式的格式,在此处指定:http://www.w3.org/TR/WD-logfile.html

此格式例如由IIS使用,并由AWStats理解。

答案 1 :(得分:1)

真的有不同种类的访问日志。最常见的是您的页面访问权限,可能具有Sir Darius描述的格式(通常称为access log)。

然后还有内部操作的记录(通常称为application log)。其中许多将处于低日志记录级别(意味着您通常不会看到它们,但有能力暂时打开它们。)

如果您不采取预防措施,您将收到如下日志:

  • 在2ms内执行查询XYZ
  • 查询ABC执行时间为1毫秒
  • 开始交易
  • 订单发送
  • 开始交易
  • 订单已删除
  • 查询ABC执行时间为1毫秒

在调查生产问题时,这通常不太有用。每隔一行可以属于同一用户或不同用户。你不知道。

我发现每个这样的日志行都很容易得到如下格式:

  • 时间
  • IP地址
  • 会话ID
  • 用户ID
  • 主题ID /名称
  • 序列ID

线程ID或名称很重要,因此您可以区分同一用户同时向您的应用发出多个请求的情况。

序列ID是一个计数器,它在内部计算用户自会话开始以来所做的每个请求(在Java中我为此使用了AtomicInteger)。序列ID很方便,因为在检查特定请求期间发生的所有事情时,它是一种更简单的grep方法,因为线程ID当然在提供完全不同的请求时被重用。当您使用多个线程在内部处理单个请求时,它也很方便。

通过一点点努力,这样的日志格式允许您从日志中提取单个用户的操作并放大到单个请求。