2 回答
TA贡献1828条经验 获得超6个赞
正如这篇文章中所解释的,这很容易做到。
在config/logging.php( docs ) 中配置日志记录通道
'channels' => [
// ... other channels like stack or single
'logstash' => [
'driver' => 'custom',
'via' => \App\LogstashLogger::class,
'host' => env('LOGSTASH_HOST', '127.0.0.1'),
'port' => env('LOGSTASH_PORT', 4718),
],
],
创建自定义 Logger 工厂 ( docs )
namespace App;
use Monolog\Formatter\LogstashFormatter;
use Monolog\Handler\SocketHandler;
use Monolog\Logger;
use Psr\Log\LoggerInterface;
class LogstashLogger {
/**
* @param array $config
* @return LoggerInterface
*/
public function __invoke(array $config): LoggerInterface
{
$handler = new SocketHandler("udp://{$config['host']}:{$config['port']}");
$handler->setFormatter(new LogstashFormatter(config('app.name')));
return new Logger('logstash.main', [$handler]);
}
}
这将使用monolog logstash 格式化程序通过 udp 将日志写入指定的主机和端口
现在将日志条目写入 logstash 指定您刚刚创建的日志记录通道 ( docs )
Log::channel('logstash')->info('Hello logstash!');
TA贡献1825条经验 获得超4个赞
由于 UCP 套接字连接,这对我不起作用,而不是调试它,我只是将其更改为 TCP 并且它起作用了。
我首先在命令行上测试了它:
echo "hello world!" | nc 127.0.0.1 5000
如果这不起作用,那么您需要更新您的弹性配置,否则 s/udp/tcp.
$handler = new SocketHandler("tcp://127.0.0.1:5000");
$formatter = new LogstashFormatter('EXAMPLE');
$handler->setFormatter($formatter);
$logger = new Logger('logstash.main', [$handler]);
- 2 回答
- 0 关注
- 198 浏览
添加回答
举报