将Apache日志重定向到标准输出

9
我有一个运行在docker容器中的Apache服务器,通过 CustomLog /dev/stdoutErrorLog /dev/stderr 指令将日志输出到STDOUT/STDERR。现在,当我调用包含Apache启动命令(apachectl start &)的脚本时,我无法在控制台上查看日志。但是,如果使用 apachectl start -DFOREGROUND 命令,则可以在控制台上看到输出。你有任何想法如何在后台运行的Apache服务器上获取控制台日志吗?感谢您的帮助。

2
那么关于将Apache2日志写入标准输出和标准错误,您有什么看法? - Aif
@Aif尝试了第二个选项,但在Apache在后台运行的情况下无法正常工作。 - Ritesh
2个回答

5

如果您的容器运行一个主Bash脚本,您可以添加以下重定向:

sudo ln -sf /proc/$$/fd/1 /var/log/apache2/access.log
sudo ln -sf /proc/$$/fd/2 /var/log/apache2/error.log

它将重定向Apache的输出到当前Bash的标准输出/标准错误流。在创建符号链接后,确保重新启动Apache,否则Apache将无法看到它。
如果Apache作为systemd/init.d服务运行也是可以的。换句话说,Apache不需要在Bash内部运行。
对我们来说,Docker容器的目的是运行持续集成测试,因此我将这些行添加到了我们的.gitlab-ci.yml文件中。
一些背景: 每个进程都有自己的标准输出/标准错误流。另一个Bash实例不一定连接到相同的标准输出/标准错误流。同样,OP的Apache指令ErrorLog /dev/stderr将把它写入系统日志或者日志记录服务(如journalctl)如果Apache作为服务运行的话。

1
我尝试过这个方法,当运行docker logs <podname> -n<namespace>命令时,日志会显示出来。然而,当我尝试从容器内部访问日志,即cat /path_to_logs.log时,文件无法打开,光标只是闪烁,什么也没有发生。 - mnagdev
@mnagdev,如果您需要一个可读的文件和重定向到标准输出,请提出一个单独的问题。我建议尝试使用tail /var/log/apache2/access.log -f&tail /var/log/apache2/error.log -f 2>&1&而不是符号链接。 - Gogowitsch

1

您可以使用docker logs container_name -f查看这些日志。如文档所述,这将显示容器的STDOUT和STDERR输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接