在PHP中进行常规日志记录的惯用方法是什么?

时间:2013-08-09 18:07:06

标签: php log4php

来自Java背景,我习惯于记录log4jlogbackslf4j等框架。但是,在进行PHP编程时,我发现自己使用echovar_dump/print_r并将记录信息写入(通常)我正在使用的网页。我认为在PHP中必须有更好的方法来做到这一点?那么做PHP日志的惯用方法是什么?

我遇到了log4php,有些地方建议将error_log用于一般日志记录目的。进一步复杂化的问题是我编写的PHP代码通常是较大系统中的模块,因此多个模块可以在同一个请求中运行,并且每个模块最好应该隔离日志。

感谢任何意见和建议。

1 个答案:

答案 0 :(得分:1)

我一直是Log4PHP的长期用户,我强烈推荐它。 :)

但是关于进行适当记录的问题相当困难。我在企业环境中使用Log4PHP,其中有多个应用程序都使用相同的日志记录,并且他们还假设记录器已正确配置并可以使用。所以它基本上是一个非常简单的“我假设在任何地方都可以使用相同的日志记录”的情况。

为他人开发模块是一项完全不同的任务。您可以使用自己的内部日志记录,但是在哪里写入这些日志消息?如果您的模块意外填满硬盘驱动器,则可以认为是不良行为。您的模块也需要记录应用程序其余部分正在登录的目标。

如果您的模块足够小,则日志记录可能不是一个非常大的问题,因为您可以通过其他方式(例如抛出异常或返回false并提供专用的错误信息功能)来传达任何错误情况。

所有日志记录框架最终都可以实现一个通用记录器接口的定义:PSR-3但是有两个缺点会使它成为您不可用的解决方案:1。Log4PHP当前没有实现该接口,2。它使用命名空间,因此至少需要PHP 5.3。

它背后的一般思路可能对你有所帮助:你的模块应该提供一种方法来接受从外部世界传递给它的记录器。如果没有记录器,则不应记录。因为你可能想测试你的日志记录,所以应该有一个包装器,它为你的模块提供了一个统一的接口,并封装了任何记录器的讨厌的实现差异。开始为您的模块提供PSR-3-Wrapper和Log4PHP包装器,并响应公众对其他日志要求的需求。