ZF2 Zend Logger-按优先级过滤

猕猴桃榨汁机

我正在使用module_config.php中具有以下配置的Zend Logger:

'log' => [
    \Base\Log\ConsoleLoggerAwareInterface::class => [
        'writers' => [
            'standard-output' => [
                'name' => 'stream',
                'options' => [
                    'stream' => 'php://output',
                ],
            ],
        ],
    ],
]

但是因为它是我不能影响日志来筛选或抑制消息。目标是提高日志记录的智能性。

我想我需要为编写器添加一个过滤器,但在module_config.php中找不到如何执行此操作的示例。

还有没有一种方法可以通过使用详细级别来调用脚本(例如,在cron中)?

希望您知道我要达到的目标。

编辑:

我的代码中有以下示例:

$this->consoleLogger->emerg('EMERG');
$this->consoleLogger->alert('ALERT');
$this->consoleLogger->crit('CRIT');
$this->consoleLogger->err('ERR');
$this->consoleLogger->warn('WARN');
$this->consoleLogger->notice('NOTICE');
$this->consoleLogger->info('INFO');
$this->consoleLogger->debug('DEBUG');

然后不应该输出经过过滤的内容吗?

主教

问:如何将Log Writer过滤到特定的错误级别?

filters密钥添加到特定编写器的配置。这是直接实例化,以消除任何配置特性:这仅输出“ WARN”和“ 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(如上所述,转换为内置日志级别);
  • 一个string(对应于实现的类名\Zend\Log\Filter\FilterInterface);
  • 一个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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZF2:试图了解Zend \ Form

来自分类Dev

zf2 Zend \ ServiceManager \ Exception \ ServiceNotCreatedException

来自分类Dev

ZF2 Zend \ Log + Doctrine2

来自分类Dev

Zend Framework 2(zf2)中TableGateway的预功能

来自分类Dev

ZF2 Zend \ Log + Dctrine2

来自分类Dev

无法在ZF2中获得Logger服务

来自分类Dev

ZF2:使用Zend \ View呈现电子邮件

来自分类Dev

ZF2:Zend Framework 2.3.0:致命错误:找不到类IndexController

来自分类Dev

ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

来自分类Dev

我应该学习zf2以使用zend表现力吗

来自分类Dev

使用ZF2中的JQuery从Zend控制器制作JSON对象

来自分类Dev

ZF2:如何使用Zend \ Db进行此简单查询

来自分类Dev

ZF2转发电子邮件(Zend \ Mail \ Storage \ Message)

来自分类Dev

ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

来自分类Dev

Zend Framework(zf2)如何将输入值传递给模型?

来自分类Dev

ZF2 / PHPUnit:模拟Zend / Db / Adapter / Adapter以便进一步使用

来自分类Dev

我应该学习zf2以使用zend表现力吗

来自分类Dev

zf2从表单获取过滤后的值

来自分类Dev

ZF2输入过滤器更改消息颜色

来自分类Dev

ZF2表单集合Zend \ Form \ FormElementManager :: get无法获取以下内容或为其创建实例

来自分类Dev

同时按下2个按键时的优先级-游戏脚本

来自分类Dev

将 ZF2 迁移到 ZF3:在插件管理器中找不到 Zend\Mvc\Router\Http\Segment

来自分类Dev

ZF2 2.2.6-> 2.3.0导致DI尝试实例化`Zend \ I18n \ Translator \ TranslatorInterface`而不是`Zend \ I18n \ Translator \ Translator`

来自分类Dev

Symfony2:路由优先级

来自分类Dev

DB2中的优先级

来自分类Dev

使用子级时,ZF2分段路线与父级的约束不匹配

来自分类Dev

根据Elasticsearch中文档的键按优先级过滤

来自分类Dev

如何使用ZF2过滤器压缩文件内容?

来自分类Dev

zf2尝试将输入过滤器注入服务

Related 相关文章

  1. 1

    ZF2:试图了解Zend \ Form

  2. 2

    zf2 Zend \ ServiceManager \ Exception \ ServiceNotCreatedException

  3. 3

    ZF2 Zend \ Log + Doctrine2

  4. 4

    Zend Framework 2(zf2)中TableGateway的预功能

  5. 5

    ZF2 Zend \ Log + Dctrine2

  6. 6

    无法在ZF2中获得Logger服务

  7. 7

    ZF2:使用Zend \ View呈现电子邮件

  8. 8

    ZF2:Zend Framework 2.3.0:致命错误:找不到类IndexController

  9. 9

    ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

  10. 10

    我应该学习zf2以使用zend表现力吗

  11. 11

    使用ZF2中的JQuery从Zend控制器制作JSON对象

  12. 12

    ZF2:如何使用Zend \ Db进行此简单查询

  13. 13

    ZF2转发电子邮件(Zend \ Mail \ Storage \ Message)

  14. 14

    ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

  15. 15

    Zend Framework(zf2)如何将输入值传递给模型?

  16. 16

    ZF2 / PHPUnit:模拟Zend / Db / Adapter / Adapter以便进一步使用

  17. 17

    我应该学习zf2以使用zend表现力吗

  18. 18

    zf2从表单获取过滤后的值

  19. 19

    ZF2输入过滤器更改消息颜色

  20. 20

    ZF2表单集合Zend \ Form \ FormElementManager :: get无法获取以下内容或为其创建实例

  21. 21

    同时按下2个按键时的优先级-游戏脚本

  22. 22

    将 ZF2 迁移到 ZF3:在插件管理器中找不到 Zend\Mvc\Router\Http\Segment

  23. 23

    ZF2 2.2.6-> 2.3.0导致DI尝试实例化`Zend \ I18n \ Translator \ TranslatorInterface`而不是`Zend \ I18n \ Translator \ Translator`

  24. 24

    Symfony2:路由优先级

  25. 25

    DB2中的优先级

  26. 26

    使用子级时,ZF2分段路线与父级的约束不匹配

  27. 27

    根据Elasticsearch中文档的键按优先级过滤

  28. 28

    如何使用ZF2过滤器压缩文件内容?

  29. 29

    zf2尝试将输入过滤器注入服务

热门标签

归档