信息日志的 PHP error_log 等价物?

Posted

技术标签:

【中文标题】信息日志的 PHP error_log 等价物?【英文标题】:Equivalent of PHP error_log for info logs? 【发布时间】:2011-12-01 02:30:01 【问题描述】:

我使用error_log 进行日志记录,但我意识到必须有一种更惯用的方式来记录应用程序进度。有info_log 吗?或等价物?

【问题讨论】:

【参考方案1】:

您可以使用error_log 追加到指定的文件。

error_log($myMessage, 3, 'my/file/path/log.txt');

请注意,您需要具有 3(消息类型)才能附加到给定文件。

您可以在脚本的早期创建一个函数来包装此功能:

function log_message($message) 
    error_log($message, 3, 'my/file/path/log.txt');   

【讨论】:

是的...但是如果不是错误怎么办?这似乎不是惯用的。在 java 中,我们有 log.info("...")、log.error("error msg") 等作为日志记录的常用习语。 是的,其他语言在命名约定等方面比 php 更好。由于 php 实际上没有日志系统(仅用于普通消息),因此您必须创建自己的函数来执行此操作。上面的函数会将消息添加到文件log.txt,而不是常规的 php 错误日志中。因此,如果有错误,您将使用error_log($message),如果没有错误,您将使用log_message($message),稍后在 log.txt 中阅读。如果你想变得花哨,你可以在消息日志中添加时间和文件位置。【参考方案2】:

我建议你使用 Monolog: https://github.com/Seldaek/monolog

你可以通过composer添加依赖:

composer require monolog/monolog

然后您可以将一个名为your-app-name的应用程序的文件流式日志初始化到文件path/to/your.log中,如下所示:

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('your-app-name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

Monolog 非常强大,您可以实现多种类型的处理程序、格式化程序和处理器。值得一看: https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md

最后这样称呼它:

// add records to the log
$log->warning('Foo');
$log->error('Bar');

为了使其具有全局性,我建议您将其添加到您的依赖注入器中(如果有的话),或者使用带有静态调用的单例。

如果您想了解更多详情,请告诉我。

【讨论】:

【参考方案3】:

等价于syslog() 和LOG_INFO 常量:

syslog(LOG_INFO, 'Message');

如果你想使用一个文件(这不是一个好主意,因为没有日志轮换并且它可能因为并发而失败),你可以这样做:

file_put_contents($filename, 'INFO Message', FILE_APPEND);

【讨论】:

以上是关于信息日志的 PHP error_log 等价物?的主要内容,如果未能解决你的问题,请参考以下文章

php添加系统日志

php输出日志

Nginx错误日志(error_log)配置及信息详解

php error_log()

php日志函数error_log

error_reporting函数引起的error_log配置失效的问题