将日志消息发送到PHP的内置Web服务器

Mar*_*oda 0 php logging slim

在我的Slim框架应用程序中,我希望能够将日志消息发送到我运行PHP内置Web服务器的控制台:

php -S localhost:8000 -c /etc/php5/apache2/php.ini-development).
Run Code Online (Sandbox Code Playgroud)

我正在使用monolog记录器:

// index.php
$app->container->singleton('log', function () {
  $log = new \Monolog\Logger('myapp');
  $log->pushHandler(new \Monolog\Handler\StreamHandler('../logs/app.log', \Monolog\Logger::DEBUG));
  return $log;
});
Run Code Online (Sandbox Code Playgroud)

我怎么做?

mad*_*vid 8

您可以将error_log message_type设置为4,它将输出到SAPI日志记录处理程序:

error_log('testing', 4);
Run Code Online (Sandbox Code Playgroud)

它将以这种风格输出:

$ php -S localhost:8000 test.php
PHP 5.4.20 Development Server started at Wed Jan 22 21:09:35 2014
Listening on http://localhost:8000
Document root is /home/David
Press Ctrl-C to quit.
[Wed Jan 22 21:09:52 2014] testing
Run Code Online (Sandbox Code Playgroud)

Monolog还使用ErrorLogHandler该类支持此消息类型.例:

require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\ErrorLogHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new ErrorLogHandler(ErrorLogHandler::SAPI, Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');
Run Code Online (Sandbox Code Playgroud)

并记录输出:

$ php -S localhost:8000 test.php
PHP 5.4.20 Development Server started at Wed Jan 22 21:18:02 2014
Listening on http://localhost:8000
Document root is /home/David/testing
Press Ctrl-C to quit.
[Wed Jan 22 21:18:06 2014] [2014-01-22 21:18:06] name.WARNING: Foo [] []

[Wed Jan 22 21:18:06 2014] [2014-01-22 21:18:06] name.ERROR: Bar [] []
Run Code Online (Sandbox Code Playgroud)

但是,不太确定为什么monolog版本包含两次时间戳.

您可以通过检查php_sapi_name()函数有条件地设置要使用的记录器:

if (php_sapi_name() == 'cli-server') {
    /* configure monolog with the ErrorLogHandler */
} else {
    /* configure monolog with the StreamHandler */
}
Run Code Online (Sandbox Code Playgroud)