将PHP命令行日志写入一个文件,就像在Python中一样


Write the PHP command line log to a file like in Python

在Python中,我们可以使用以下命令将command line日志添加到文件中,而不是console日志:

python script.py >> mylogfile.txt

如何使用PHP?我试着

php script.php >> mylogfile.txt

但是它不工作。

我终于找到了答案。它基于文章PHP的命令行-第1部分文章

我首先使用php script.php > mylog.txt,它返回一些日志文本到控制台,所以我认为它没有写入日志,但它确实如此。我想要 php script.php > mylog.txt 2>&1,它将添加任何日志到文件中。

文章说它不能在Windows上工作,但我用的是Windows 10,它可以工作。

与之前一样,错误消息与正常输出混合。但是通过从脚本输出管道,我可以从正常输出:

php outwitherrors.php 2> errors.log

这一次,您将只看到这些消息:

打开foobar.log文件作业完成

但是,如果您查看运行脚本的目录,将会创建一个名为errors.log的新文件,其中包含错误消息。数字2是用于标识的命令行句柄标准误差。注意,1是标准输出的句柄,而0是标准错误的句柄。使用命令行中的>符号,您可以将输出定向到特定位置。

虽然这看起来不是很令人兴奋,但它是一个非常方便的工具系统管理。一个简单的应用程序,运行一些脚本

php outwitherrors.php >> transaction.log 2>> errors.log

使用'>> ',我告诉终端将新消息附加到现有消息中日志(而不是覆盖它)。正常的操作消息如下现在记录到文件transaction.log,我可能每个月仔细查看一次,只是为了检查一切正常。同时,任何需要更快响应的错误都以errors.log文件结束,其他cron作业可能根据需要每天(或更频繁地)通过电子邮件发送给我。

Unix和Windows的命令行有一个不同,当涉及到管道输出时,你应该知道。在Unix中,您可以将标准输出和标准错误流合并到一个目的地,例如:

php outwitherrors.php > everything.log 2>&1

它将标准错误重新路由到标准输出,这意味着两者都得到写入日志文件everything.log.