我有一个在Docker中运行的PHP / Symfony应用程序,它使用Monolog登录到stdout / stderr。除了在容器中运行Symfony控制台命令时,所有这些都很好用。
monolog:
handlers:
stdout:
type: filter
handler: stdout_unfiltered
max_level: notice
channels: ['!event']
stdout_unfiltered:
type: stream
level: debug
path: 'php://stdout'
stderr:
type: stream
level: warning
channels: ['!event']
path: 'php://stderr'
console:
type: console
channels: ['!console', '!doctrine', '!event']
process_psr_3_messages: false
问题在于,无论何时执行命令,“ stdout”,“ stderr”和“ console”处理程序都会登录到当前的终端进程。这将导致控制台输出混乱,并且docker logs
不包含日志条目:http://i.imgur.com/yB1IKrR.png。
是否有一种简单的方法可以始终将日志记录输出发送到php-fpm(或任何工作程序)进程?
答案 0 :(得分:0)
登录到文件/proc/1/fd/1
(或fd / 2)
monolog:
handlers:
...
stdout_unfiltered:
type: stream
level: debug
path: '/proc/1/fd/1'
stderr:
type: stream
level: warning
channels: ['!event']
path: '/proc/1/fd/2'
...
也许您可以检查它指向的位置并在那里重定向(docker exec aContainer ls -l /proc/1/fd/2
),但这可能会根据容器的开始而改变。
不确定它是否理想,但是可以正常工作(当symfony对/ proc / 1 / fd / *具有写权限时)。