Web 服务的快速顺序日志记录


Fast sequential logging for webservices

我的网络服务结构如下:

  1. 接收请求
  2. 解析和验证输入
  3. 做实际的网络服务
  4. 验证输出

我主要使用日志记录进行调试,如果出现问题,我想知道请求是什么,以便我希望重现它(即发送完全相同的请求)。

目前我正在记录到 MySQL 数据库表。1.将创建一个记录,该记录在 2 之后更新为更多信息。和 3.并在 4 点后清理。(修剪成功请求的日志)。

我希望日志记录尽可能快速和轻松。此处的任何加速都将大大提高整体性能(每个请求的往返)。

我正在考虑使用INSERT DELAYED但我不能这样做,因为我需要LAST_INSERT_ID来更新并稍后删除日志记录,或者至少记录请求的状态(即成功或错误),以便我知道何时修剪。

我可以自己生成一个唯一的 id(或者至少是一个"足够唯一"的 id),但即便如此,我也不会知道DELAYED语句的顺序,我最终可能会尝试更新或删除尚不存在的记录。而且由于DELAYED还删除了使用NUM_AFFECTED_ROWS的功能,因此我无法检查查询是否受到影响。

有什么建议吗?

当你说修剪我假设它是否成功时,你删除了记录?如果是这样,我认为如果您有一个 Java 对象在进程展开时存储信息而不是数据库,那么如果发生异常,您将对象中的信息一次性记录到数据库中,这对您来说会更好。

如果你想更进一步,我做了类似的事情,我有一个服务,它对审计数据的日志记录进行排队并以稳定的速度插入信息,所以如果服务被锤击,就不会用日志记录语句堵塞数据库,但如果你唯一的日志记录错误可能是矫枉过正。

我想

我可能只需要做一个REPLACE DELAYED,然后在其他时间进行修剪。(带DELETE DELAYED)。