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

时间:2016-11-10 17:30:41

标签: php logging command-line command command-line-interface

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

python script.py >> mylogfile.txt

我怎样才能使用PHP?我试过了

php script.php >> mylogfile.txt

但它没有用。

仅供参考,它可能会有所帮助,我使用的是Windows 10。

1 个答案:

答案 0 :(得分:0)

终于找到了答案。它基于这篇文章:https://www.sitepoint.com/php-command-line-1-2/

我首先使用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是用于标识的命令行句柄 STDERR。注意,1是STDOUT的句柄,而0是句柄 STDERR。使用命令行中的>符号,您可以指示 输出到特定位置。

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

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

使用'>>',我告诉终端将新消息附加到现有消息 记录(而不是覆盖它)。正常的操作信息是 现在记录到transaction.log,我可能每月阅读一次,只是 检查一切都没问题。同时,任何需要的错误 更快的响应最终会出现在errors.log中,这可能是其他一些cron工作 根据需要每天(或更频繁地)给我发电子邮件。

UNIX和Windows命令行之间有一个区别, 当谈到管道输出时,你应该知道。在UNIX上, 您可以将STDOUT和STDERR流合并到一个目标, 例如:

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

这样做是将STDERR重新路由到STDOUT,这意味着两者都得到了 写入日志文件everything.log。