限制码头记录

时间:2016-05-30 20:55:18

标签: logging docker

我有一个运行用户代码的应用程序。我想确保Docker没有收集过多的日志,无论如何我都会丢弃这些日志。为此,我尝试使用max-sizemax-file日志记录选项来获取用户输出的最后几千字节并丢弃其余部分,但这样做似乎不起作用。

如果我这样做:

$ docker run --log-opt max-size=2 --log-opt max-file=1 python:2 python -c "for i in range(10): print i"
0
1
2
3
4
5
6
7
8
9

然后它仍会在屏幕上打印完整输出。如果我在主机上手动检查日志,我可以看到包含完整输出的文件。

在这种情况下我不应该只获得9\n吗?我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

Dockers JSON file log options不会影响stdout和stderr流式传输到docker客户端。在前台运行时,您将看到完整的输出。

当您运行docker logs时,信息将从文件中撤回。

最大尺寸需要一个单位。千字节,兆字节或千兆字节。

--log-opt max-size=[0-9+][k|m|g]

这设置了JSON日志文件的大小,因此与仅影响大小的行长度相比,有额外的元数据。

{"log":"1\n","stream":"stdout","time":"2016-05-30T07:39:31.265191929Z"}

您应该在1k的空间中最多容纳14个日志条目。码头工人日志轮换是否准确是另一回事。

在任何情况下,您可能都在浪费时间处理小于4k的文件大小。