问:如何将日志编写器过滤到特定的错误级别?
将filters
键添加到特定作者的配置中。这里的直接实例,以消除任何配置特点:本机只输出“警告”和“EMERG”消息:
$config = [
'writers' => [
'standard-output' => [
'name' => 'stream',
'options' => [
'stream' => 'php://output',
'filters' => \Zend\Log\Logger::WARN,
],
],
],
];
$logger = new \Zend\Log\Logger($config);
$logger->emerg('EMERG');
$logger->warn('WARN');
$logger->debug('DEBUG');
添加filters
配置您的modules_config.php
应该有类似的效果。如果没有,请检查您的zend-log版本(例如composer show
)并提供建议。
问:如何更改错误级别过滤用-v命令行参数?
AFAIK,没有自动的方式来绑定标准详细标志(-v
)与特定的日志级别。所以你必须编写你自己的过滤器。有一件事情是整洁知道的是,filters
键可以采取:
- 的
int
(如上面完成的,它转换为内置的日志级别);
- a
string
(对应于实施\Zend\Log\Filter\FilterInterface
的类名);
- an
object
(\Zend\Log\Filter\FilterInterface
的实例);
- 或这些的数组。
您可以使用这种灵活性来解决将命令行参数绑定到日志值的需求。下面是默认显示突发事件的自定义类,但对于每一个v
在命令行上增加了显示的优先级:
class CliLoggingFilter implements \Zend\Log\Filter\FilterInterface
{
public function __construct()
{
$this->level = \Zend\Log\Logger::EMERG;
if (array_key_exists('v', $args = getopt('v'))) {
$this->level += count($args['v']);
}
}
public function filter(array $event)
{
return ($event['priority'] <= $this->level);
}
}
你会再有这样的配置:'filters' => CliLoggingFilter::class
。
$ php public/index.php
2016-07-25T10:57:28-04:00 EMERG (0): EMERG
$ php public/index.php -vvvv
2016-07-25T10:57:32-04:00 EMERG (0): EMERG
2016-07-25T10:57:32-04:00 WARN (4): WARN
$ php public/index.php -vvvvvvv
2016-07-25T10:57:34-04:00 EMERG (0): EMERG
2016-07-25T10:57:34-04:00 WARN (4): WARN
2016-07-25T10:57:34-04:00 DEBUG (7): DEBUG
问:如何更改所有航线使用-v?
AFAIK,没有办法指定全局命令行参数。您需要(a)更新所有控制台路由以接受参数或(b)以不同方式传递日志级别。
更新所有的路线并不难。您可以定义保存值的变量,然后包括在配置上,像这样:
$globalConsoleRouteParams = '[--verbose|-v]';
return [ 'console' => 'router' => 'routes' => [
'foo' => [ 'options' => [ 'route' => "foo $globalConsoleRouteParams ..." ] ],
'bar' => [ 'options' => [ 'route' => "bar $globalConsoleRouteParams ..." ] ],
// ...
]];
或者,您可以用说的环境变量传递所需的日志级别,再加上也许任何额外的配置,你可能希望。修改我们前面的例子:
class CliLoggingFilter implements \Zend\Log\Filter\FilterInterface
{
public function __construct()
{
$this->level = \Zend\Log\Logger::EMERG;
if (false !== ($level = getenv('LOG_LEVEL'))) {
$this->level = $level;
}
}
// ...
}
则可以调用像
$ LOG_LEVEL=7 php index.php foo
我在的application.ini此设置,例如:resources.log.stdout.filterParams.priority = 1 –