Monolog stdout / stderr记录到Docker中的当前终端进程

时间:2019-02-13 23:33:13

标签: symfony docker monolog

我有一个在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(或任何工作程序)进程?

1 个答案:

答案 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 / *具有写权限时)。