如何使用php docker容器查看php日志信息?
我有一个php fpm docker容器。Php fpm在容器中运行,我可以在主机上获取Php fpm的日志吗?如果可以,怎么办?常见的方法是容器中的应用程序不登录到文件,而是在如何使用php docker容器查看php日志信息?,php,docker,containers,Php,Docker,Containers,我有一个php fpm docker容器。Php fpm在容器中运行,我可以在主机上获取Php fpm的日志吗?如果可以,怎么办?常见的方法是容器中的应用程序不登录到文件,而是在stdout/stderr上输出日志。容器主进程打印到stdout/stderr的任何内容都由docker的内置日志记录功能收集,并可以使用docker日志查看 默认情况下,日志使用json文件日志驱动程序存储在每个容器中,当容器本身被删除时,日志将被删除,但还有其他可用的日志驱动程序(请参阅),允许您将这些日志发送到(
stdout
/stderr
上输出日志。容器主进程打印到stdout/stderr
的任何内容都由docker的内置日志记录功能收集,并可以使用docker日志查看
默认情况下,日志使用json文件
日志驱动程序存储在每个容器中,当容器本身被删除时,日志将被删除,但还有其他可用的日志驱动程序(请参阅),允许您将这些日志发送到(例如syslog
,journald
,gelf
)
也看到
常见的方法是容器内的应用程序不登录到文件,而是在stdout
/stderr
上输出日志。容器主进程打印到stdout
/stderr
的任何内容都由docker的内置日志记录功能收集,并可以使用docker日志查看
默认情况下,日志使用json文件
日志驱动程序存储在每个容器中,当容器本身被删除时,日志将被删除,但还有其他可用的日志驱动程序(请参阅),允许您将这些日志发送到(例如syslog
,journald
,gelf
)
也看到
Docker容器的标准是登录到
stdout
/stderr
。但是,对于某些PHP运行时,例如phpfpm
,这并不适用,因为日志是如何在和中被破坏的
因此,我改变了在卷上写入日志的方法,并使用一个函数将其放入stderr
,从而进入Docker的日志集合和/或您的orchestrator
示例docker compose.yml
部分:
cli:
build: .
volumes:
- logs:/srv/annotations/var/logs
logger:
image: busybox:1.27.2
volumes:
- logs:/logs
# be careful, this will only tail alredy existing files
command: tail -f /logs/all.json
depends_on:
- cli
Docker容器的标准是登录到stdout
/stderr
。但是,对于某些PHP运行时,例如phpfpm
,这并不适用,因为日志是如何在和中被破坏的
因此,我改变了在卷上写入日志的方法,并使用一个函数将其放入stderr
,从而进入Docker的日志集合和/或您的orchestrator
示例docker compose.yml
部分:
cli:
build: .
volumes:
- logs:/srv/annotations/var/logs
logger:
image: busybox:1.27.2
volumes:
- logs:/logs
# be careful, this will only tail alredy existing files
command: tail -f /logs/all.json
depends_on:
- cli
如果将PHP日志(如应用程序日志)发送到stdout,它们将在HTTP响应中发送。也许有一种方法可以将他们的stderr发送到php-fpm-stderr或类似的格式。@giorgiosironi下面是官方php-fpm映像如何处理它;谢谢,但是遇到了问题,因此我放弃了stderr方法,因为JSON日志会被新行和php fpm
引入的其他注释弄乱或损坏。如果您将php日志(如应用程序日志)发送到stdout,它们将在HTTP响应中发送。也许有一种方法可以将他们的stderr发送到php-fpm-stderr或类似的格式。@giorgiosironi下面是官方php-fpm映像如何处理它;谢谢,但是遇到了问题,因此我放弃了stderr方法,因为JSON日志会被phpfpm
引入的换行符和其他注释弄乱或损坏。