如何在PHP中写入错误日志文件

94

在执行PHP代码时,我希望能将错误信息写入错误日志文件。

我正在尝试使用PHP的error_log()函数。文档

但是它对我来说无法正常工作。


13
“it's not working properly” 的意思是“它不能正常工作”。 - What have you tried
7
请展示给我们你尝试了什么,告诉我们你得到了什么结果以及你期望发生什么。 - UnholyRanger
请展示您的代码,说明您期望发生什么,描述实际发生了什么。通常error_log()函数只要正常工作,您并没有说清楚它到底哪里出了问题,因此您的问题不够清晰明确。 - hakre
教程链接:http://code2real.blogspot.in/2015/06/php-generate-log-messages-and-save-to.html - Pupil
这可能是由权限问题引起的,即您为错误日志文件创建的用户与Apache用于写入该文件的用户不同。请查看'/etc/apache2/envvars/'文件以寻找可能的修复方法。 - Robert Brisita
4个回答

129

如果您不想改变php.ini文件中的任何内容,根据PHP文档,您可以这样做。

error_log("Error message\n", 3, "/mypath/php.log");

第一个参数是要发送到日志的字符串。第二个参数3表示期望文件目标。第三个参数是日志文件路径。


2
我只是在执行 error_log("错误信息\n"),但是在 /var/log/httpd/error_log 中没有任何内容显示。:( 有什么想法吗? - trusktr
3
请检查 php.ini 文件中的 error_log 配置设置,该设置将保存错误写入的文件名。例如:error_log "log_file_name"。更多详情请参考 http://php.net/manual/en/function.error-log.php - suspectus
教程在这里:http://code2real.blogspot.in/2015/06/php-generate-log-messages-and-save-to.html - Pupil
@suspectus,你的回答是我长期以来一直在寻找的。我相信第三个参数可以是我想要记录错误消息的任何文件。我是正确的吗? - CodeForGood
@同学,请问通过error_log()写入的日志文件中数据会保留多长时间? - CodeForGood

59

您可以简单地使用:

error_log("your message");

默认情况下,该消息将被发送到php系统日志记录器。


11
如果您使用这种方法,请确保打开错误日志记录并取消注释php.ini文件中的 error_log 指令。 - George Cummins
5
对于建议,问题提出一年后,回答者已经尝试过但没有起作用的内容给予-1。此外,在这个答案之前,suspectus已经给出了更好的答案。请翻译以上内容。 - ToolmakerSteve
@ToolmakerSteve,这也是一个相当不错的替代方案。 - Pacerier
@Pacerier - 这个回答已经是OP所说尝试过的了。那它对讨论有什么贡献呢? - ToolmakerSteve
2
@ToolmakerSteve他并没有说他如何使用它,只是在尝试使用它。被接受的(非常好的)回答也使用了error_log... - Ben Visness
@ToolmakerSteve 你好,我的回答旨在说明error_log函数默认将消息发送到您的记录器(例如error.log)。也许他在使用函数的某些选项时犯了错误。在他的问题中,我们不知道他如何使用该函数。如果您认为我的回答无用,请原谅我。 - SkaJess

25

我们都知道PHP将错误保存在php_errors.log文件中。

但是,该文件包含大量数据。

如果我们想要记录应用程序数据,我们需要将其保存到自定义位置。

我们可以使用error_log函数中的两个参数来实现此目的。

http://php.net/manual/en/function.error-log.php

我们可以这样做:

error_log(print_r($v, TRUE), 3, '/var/tmp/errors.log');

其中,

print_r($v, TRUE):将$v(数组/字符串/对象)记录到日志文件中。 3:将日志消息放入第三个参数指定的自定义日志文件中。

'/var/tmp/errors.log':自定义日志文件(此路径适用于Linux,我们可以根据操作系统指定其他路径)。

或者,您可以使用file_put_contents()

file_put_contents('/var/tmp/e.log', print_r($v, true), FILE_APPEND);

Where:

'/var/tmp/errors.log': 自定义日志文件(此路径适用于Linux,根据操作系统可以指定其他路径)。 print_r($v, TRUE) : 将 $v(数组/字符串/对象)记录到日志文件中。 FILE_APPEND:常量参数,指定是否追加到文件(如果存在),如果文件不存在,则创建新文件。


3
您可以使用普通的文件操作来创建错误日志。 只需参考以下内容并输入此链接: PHP 文件处理

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接