Symfony 4使用Monolog的Redis处理程序启用日志记录

时间:2019-04-11 15:39:02

标签: symfony redis symfony4 monolog

我有一个工作正常的ELK堆栈连接到Redis。

我也有一个正在运行的无状态Symfony 4应用程序,我想将所有生产日志发送到我的Redis。

我知道Monolog具有Redis处理程序,但是我不知道如何调整config / prod / monolog.yaml文件来完成此操作,如果还有另一种方法。

这是现在的样子:

monolog:
handlers:
    main:
        type: fingers_crossed
        action_level: error
        handler: nested
        excluded_http_codes: [404]
    nested:
        type: stream
        path: "php://stderr"
        level: debug
    console:
        type: console
        process_psr_3_messages: false
        channels: ["!event", "!doctrine"]
    deprecation:
        type: stream
        path: "php://stderr"
    deprecation_filter:
        type: filter
        handler: deprecation
        max_level: info
        channels: ["php"]

1 个答案:

答案 0 :(得分:0)

我采用的方法是,首先安装predis客户端:

composer require predis/predis

然后创建一个自定义服务类,以扩展Monolog软件包随附的RedisHandler类:

namespace App\Service\Monolog\Handler;

use Monolog\Handler\RedisHandler;
use Monolog\Logger;
use Predis\Client as PredisClient;

class Redis extends RedisHandler
{
    public function __construct( $host, $port = 6379, $level = Logger::DEBUG, $bubble = true, $capSize = false)
    {
        $predis = new PredisClient( "tcp://$host:$port" );
        $key = 'logstash';

        parent::__construct($predis, $key, $level, $bubble, $capSize);
    }
}

接下来,激活我们刚刚在services.yml配置文件上创建的服务:

services:    
  monolog.handler.redis:
    class: App\Service\Monolog\Handler\Redis
    arguments: [ '%redis.host%' ]

确保已设置参数 redis.host 并指向您的Redis服务器。就我而言,我的参数值是我的Redis服务器的IP。

我向该类添加了其他参数,例如端口和日志级别。您可以在实例化服务时进行设置,就像使用host参数一样。

最后,在monolog.yaml配置文件中配置自定义日志处理程序服务。就我而言,我只需要具有配置的生产日志,如下所示:

handlers:
  custom:
    type: service
    id: monolog.handler.redis
    level: debug
    channels: ['!event']