Symfony 4 启用使用 Monolog 的 Redis 处理程序进行日志记录
Symfony 4 enable logging with Monolog's Redis handler
我有一个连接到 Redis 的工作 ELK 堆栈。
我还有一个工作的无状态 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"]
我采用的方法是,首先安装 predis 客户端:
composer require predis/predis
然后创建自定义服务class扩展Monolog包附带的RedisHandlerclass:
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。
我向 class 添加了其他参数,例如端口和日志级别。您可以在实例化您的服务时设置它,就像使用主机参数一样。
最后,在 monolog.yaml 配置文件中配置自定义日志处理程序服务。就我而言,我只需要配置如下的生产日志:
handlers:
custom:
type: service
id: monolog.handler.redis
level: debug
channels: ['!event']
我有一个连接到 Redis 的工作 ELK 堆栈。
我还有一个工作的无状态 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"]
我采用的方法是,首先安装 predis 客户端:
composer require predis/predis
然后创建自定义服务class扩展Monolog包附带的RedisHandlerclass:
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。
我向 class 添加了其他参数,例如端口和日志级别。您可以在实例化您的服务时设置它,就像使用主机参数一样。
最后,在 monolog.yaml 配置文件中配置自定义日志处理程序服务。就我而言,我只需要配置如下的生产日志:
handlers:
custom:
type: service
id: monolog.handler.redis
level: debug
channels: ['!event']