0

我想到了以下几点:

  • 用户 ID(如果可用)
  • 用户ip地址
  • 时间戳
  • 执行的动作

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

4

2 回答 2

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 使用,并且被 AStats 理解。

于 2011-06-13T13:50:55.110 回答
1

确实有不同种类的访问日志。最常见的是用于您的页面访问,并且可能具有大流士爵士所描述的格式(通常称为access log)。

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

如果你不采取预防措施,你会得到一个类似的日志:

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

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

我发现为每个这样的日志行设置如下格式很容易:

  • 时间
  • IP地址
  • 会话 ID
  • 用户身份
  • 线程 ID/名称
  • 序列号

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

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

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

于 2011-06-13T14:34:05.513 回答