0

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

我遇到过log4php,有些地方建议error_log也用于一般日志记录目的。更复杂的是,我编写的 PHP 代码通常是更大系统中的模块,因此多个模块可能在同一个请求中运行,并且日志记录最好每个模块隔离。

任何意见和建议表示赞赏。

4

1 回答 1

1

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

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

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

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

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

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

于 2013-08-09T18:32:08.997 回答