所以我注意到,如果我docker exec
进入nginx图像并转到/var/log/nginx/
,则错误将被重定向到stdout
0 lrwxrwxrwx 1 root root 11 Nov 7 00:24 access.log -> /dev/stdout
0 -rw-r--r-- 1 root root 0 Nov 16 04:57 mywebsite_error.log
0 lrwxrwxrwx 1 root root 11 Nov 7 00:24 error.log -> /dev/stderr
如果使用docker logs <nginx-container>
,我假设这是输出?同时也符号链接(?)我的网站错误并将访问日志访问同一输出是否有意义?这样会中断附加到access.log
和error.log
的链接吗?
或者更好的解决方案是将我的网站错误输出到这些默认访问和错误日志中(因为此服务器上将只运行一个站点)
答案 0 :(得分:2)
如果我使用docker日志,我假设这是输出?
是的
也可以对我的网站进行错误链接和访问吗? 记录到相同的输出?
可以这样做。错误消息将纠缠在所有访问日志条目中。
这会中断现有的附加链接吗 访问access.log和error.log?
AFAIK号您可以有多个指向/dev/stdout
的符号链接。
答案 1 :(得分:1)
正确的解决方案取决于具体情况,并由设计者确定。
一些选择是:
如果使用日志解析器处理日志,则合并行并使用docker日志记录驱动程序不是问题。日志解析器将能够从日志条目本身中识别日志类型/源并进行相应处理。对于写入格式化日志条目的Nginx来说,这很简单。
要将日志保留为单独的文件,请在写入日志的docker卷上安装主机目录,并删除指向stdout / stderr的符号链接。这提供了一种在容器外部共享日志的可预测方式。可以通过将日志卷装入另一个容器中来扩展此解决方案,该容器随后将处理日志。
还可以编写一个脚本,该脚本从容器内部启动日志传送任务,例如filebeat,并在后台运行。这违反了微服务/单进程docker约定,因此不建议使用。