如何将docker日志redirect到单个文件?
我想将我的docker容器的所有日志redirect到单个日志文件来分析它们。 我试过了
docker logs container > /tmp/stdout.log 2>/tmp/stderr.log
但是这给login在两个不同的文件。 我已经尝试过了
docker logs container > /tmp/stdout.log
但它没有工作。
不需要redirect日志。
Docker默认将日志存储到一个日志文件。 要检查日志文件path运行命令:
docker inspect --format='{{.LogPath}}' containername /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
打开该日志文件并分析。
如果您redirect日志,那么您将只能在redirect之前获取日志。 你将无法看到活动日志。
编辑:
要查看实时日志,您可以在命令下运行
tail -f `docker inspect --format='{{.LogPath}}' containername`
注意:
这个日志文件/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
将被创build,只有当docker生成日志,如果没有日志,那么这个文件将不会在那里。 它是类似的,如果我们运行命令docker logs containername
,它什么都不返回。 在这种情况下,这个文件将不可用。
这个选项怎么样:
docker logs contaiername >& logs/myFile.log
我希望这可以帮助别人。
对我来说非常有用
这对我行得通:
docker logs <options> containername >& logs/myFile.log
假设你有多个容器,并且你想把日志聚合成一个文件,你需要使用一些日志聚合器,比如fluentd。 作为docker容器的日志驱动程序,支持fluentd。
所以在docker-compose中,你需要定义日志驱动
service1: image: webapp:0.0.1 logging: driver: "fluentd" options: tag: service1 service2: image: myapp:0.0.1 logging: driver: "fluentd" options: tag: service2
第二步是更新fluentd conf以迎合服务1和服务2的日志
<match service1> @type copy <store> @type file path /fluentd/log/service/service.*.log time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S%z </store> </match> <match service2> @type copy <store> @type file path /fluentd/log/service/service.*.log time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S% </store> </match>
在这个configuration中,我们要求将日志写入到这个path的单个文件中
/fluentd/log/service/service.*.log
第三步是运行定制的fluentd,它将开始将日志写入文件。
以下是分步说明的链接
比特长,但是正确的方式,因为你得到更多的控制日志文件的path等,它也适用于Docker Swarm。