我的monolog.yaml文件中具有以下配置:
monolog:
handlers:
main:
type: stream
path: "php://stdout"
level: debug
channels: ["!event"]
gelf:
type: gelf
publisher:
hostname: mygelfhost.com
port: 12201
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine", "!console"]
但是它仅使用UDP将消息发送到mygelfhost.com。当我尝试放置时:
hostname: tcp://mygelfhost.com
我收到以下错误:
Failed to create socket-client for udp://tcp://log-dev.hpa.lis-dev.net:12201: php_network_getaddresses: getaddrinfo failed: Name or service not known (0)
我的目标是通过TCP将日志发送到同一主机,我已经在此处检查配置:https://github.com/symfony/monolog-bundle/blob/master/DependencyInjection/Configuration.php#L25,没有可能的解决方案。
答案 0 :(得分:0)
您需要指定Gelf的运输方式。默认情况下,它使用UDP。
monolog:
handlers:
gelf:
type: gelf
id: my_tcp_gelf_publisher
在您的服务中:
services:
my_tcp_gelf_publisher:
class: Gelf\Publisher
arguments: [@gelf.tcp_transport]
gelf.tcp_transport:
class: Gelf\Transport\TcpTransport
arguments:
- "mygelfhost.com" # Hostname
- 12201 #port
类似的东西应该可以工作,尽管我还没有测试代码。基于定义发布者和来自https://github.com/bzikarsky/gelf-php
的配置示例答案 1 :(得分:0)
以@Chase的答案为基础:
monolog:
handlers:
gelf:
type: gelf
publisher: my_tcp_gelf_publisher
上面的区别是my_tcp_gelf_publisher是Publisher对象,而不是Handler对象。您想告诉处理程序,哪个发布者使用“ my_tcp_gelf_publisher”,因为这是在services.yaml中定义的
在services.yaml中:
services:
my_tcp_gelf_publisher:
class: Gelf\Publisher
arguments: ["@gelf.tcp_transport"]
gelf.tcp_transport:
class: Gelf\Transport\TcpTransport
arguments:
- "mygelfhost.com" # Hostname
- 12201 #port
这几乎是相同的,除了需要将@ gelf.tcp_transport服务引用放在引号中,否则会出现缩放器错误。
一个额外的提示,如果您偶然决定将传输配置为使用端口12202(Gelf \ Transport \ TcpTransport的SSL端口),请确保确保端点支持ssl并提供正确配置的SslOptions对象,否则请使用标准端口12201(或任何其他端口)。