【问题标题】:Log threads in PHP在 PHP 中记录线程
【发布时间】:2009-03-26 07:55:14
【问题描述】:

最近我遇到了这样的问题。 我正在开发应用程序,其中日志记录非常重要。

登录该应用程序是指消息,例如

  • 用户 A(id=x) 已创建发票(发票编号为 XXX)(1)
  • 用户 B(id=y) 已购买图书 (2)
  • 用户 A(id=x) 已批准发票 XXX (3)

(1) 和 (3) 是一个特定请求/命令的消息 - 所以当我想查看日志时,我需要获取有关此请求日志线程的所有信息。

由于应用程序负载很高,并且大量使用 AJAX,不同用户/操作/请求的日志消息可能会混合。

暂时,我已经这样解决了这个问题:

我在请求的开头创建了一些独特的UUID 代码,并在任何日志消息之前添加了这个独特的代码。所以,我可以通过简单的 grep UNIX 命令找到特定线程的所有消息。

这解决了问题,但我不确定它是否是该任务的最佳解决方案。看起来更像是重新发明轮子。 对于这个问题,您会推荐什么解决方案?

【问题讨论】:

    标签: php logging


    【解决方案1】:

    在我的脑海中,有几个建议(如果你还没有实施的话)

    1. 将每种不同类型的事件记录到单独的日志文件中,例如BookPurchases.log、InvoiceApprovals.log。也就是说,保留所有内容的原始输出日志,以防事件序列与分类无关。

    2. 如果您还没有记录包,请使用记录包,例如The Log PackageZend_Log,您可以在其中设置不同的记录优先级。

    我不知道这对你有没有用,因为你说的似乎很中肯。

    【讨论】:

    • 1、2 已完成。也许我现在应该把它留在那种形式,因为我没有更好的主意:(
    • 那么你就完成了!只要您可以从日志中获得所需的内容,并且无需付出太多努力,您现有的方法可能不会有任何重大改进。
    【解决方案2】:

    如果您需要查看特定用户会话的所有日志,请使用

    session_start()

    在脚本的顶部,然后添加

    session_id()

    到每条日志消息的前面。

    【讨论】:

    • 好主意,但不幸的是,它不能用于整个用户会话,而是用于请求(一次 1 到 5 条日志消息)。但是您的建议在某些情况下可能有用。谢谢你,亚当
    【解决方案3】:

    多年来,Java 世界中日志记录的事实标准一直是 log4j。这已被移植到许多其他语言 log4Net、log4Ruby 和 log4Php

    我从未使用过 log4php,但如果它实现与其他框架相同的模式/算法,它肯定会完成你的工作。

    我不会声称它比 karim79 推荐的任何一个选项都好,只是它遵循经过验证的设计。

    【讨论】:

    • log4php 还没有发布
    • 我之前使用过 log4j,但当时没有这样的任务。要么我不知道如何解决使用 log4j 的问题。问题不在于:我应该使用什么日志框架?这更像是概念问题
    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多