docker-compose logs 命令如何实现只读取新增量的日志?

docker-compose logs 命令如何实现只读取新增量的日志?

我本来运行 docker-compose 来观察日志是通过?下面的方式来实现的

nohup docker-compose up > run.log &

然后在终端中使用 tail -f 持续观察日志的输出:

tail -f run.log

虽然上面的命令工作良好,但是这样的方式不够优雅,通过阅读 docker-compose 文档,我发现下面的内容:

docker-compose logs

(ideaboom) ╭─bot@amd-5700G ~/Desktop/ideaboom/test_docker  ‹master*› 

╰─➤ docker-compose logs --help

View output from containers.

Usage: logs [options] [--] [SERVICE...]

Options:

--no-color Produce monochrome output.

-f, --follow Follow log output.

-t, --timestamps Show timestamps.

--tail="all" Number of lines to show from the end of the logs

for each container.

看起来和 Linux 的 tail 很像,所以我把我的 docker-compose.yml 配置为了下面的样子:

version: "3"

services:

docker_log_service:

container_name: docker_log_service

image: testing/docker_log

network_mode: "host"

env_file:

- .env

logging:

driver: json-file

options:

max-size: "200k"

max-file: "10"

command: python main.py

下面是 Dockerfile

FROM python:3.9.9-slim

ENV PYTHONUNBUFFERED 1

RUN mkdir /code

WORKDIR /code

COPY main.py /code/

RUN pip install loguru pydantic -i https://mirrors.aliyun.com/pypi/simple

下面是 python 的 main.py 文件内容

import time

from loguru import logger

while True:

logger.debug(f'{time.time()}')

logger.debug(f'中文测试')

time.sleep(1)

构建镜像的命令:

sudo docker build -t "testing/docker_log" .

再用下面的命令运行容器服务:

docker-compose up -d

再用下面的命令查看容器服务的日志输出:

docker-compose logs -f

输出如下

(ideaboom) ╭─bot@amd-5700G ~/Desktop/ideaboom/test_docker  ‹master*›

╰─➤ docker-compose logs -f 130 ↵

Attaching to docker_log_service

docker_log_service | 2021-12-19 06:30:28.503 | DEBUG | __main__:<module>:31 - 1639895428.503394

docker_log_service | 2021-12-19 06:30:28.503 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:29.505 | DEBUG | __main__:<module>:31 - 1639895429.5050511

docker_log_service | 2021-12-19 06:30:29.505 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:30.507 | DEBUG | __main__:<module>:31 - 1639895430.5074062

docker_log_service | 2021-12-19 06:30:30.507 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:31.509 | DEBUG | __main__:<module>:31 - 1639895431.5091336

docker_log_service | 2021-12-19 06:30:31.509 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:32.510 | DEBUG | __main__:<module>:31 - 1639895432.510944

docker_log_service | 2021-12-19 06:30:32.511 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:33.512 | DEBUG | __main__:<module>:31 - 1639895433.5128994

docker_log_service | 2021-12-19 06:30:33.513 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:34.514 | DEBUG | __main__:<module>:31 - 1639895434.5148842

docker_log_service | 2021-12-19 06:30:34.515 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:35.516 | DEBUG | __main__:<module>:31 - 1639895435.5168786

docker_log_service | 2021-12-19 06:30:35.517 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:36.518 | DEBUG | __main__:<module>:31 - 1639895436.5186315

docker_log_service | 2021-12-19 06:30:36.519 | DEBUG | __main__:<module>:32 - 中文测试

docker_log_service | 2021-12-19 06:30:37.520 | DEBUG | __main__:<module>:31 - 1639895437.5202699

一切看起来都正常,但是,当我再次运行 docker-compose logs -f 命令的时候,居然发现又被一切所有的旧日志都打印出来了,而不是只包含 "运行 docker-compose logs 命令" 之后的新日志!!!

我希望运行 docker-compose logs -f 命令只打印新的日志,而不是把老的日志都打印出来!!!

如果这个日志文件已经有 1TB,那不知道有等候到何年马月了!!!

使用 Linux 的 tail -f 命令会打印一点旧日志,当也就几行,无伤大雅,但是这个 docker-compose logs -f 居然是打印一切,真是不可思议!!!!

所以如何做到:运行 docker-compose logs -f 命令只打印新的日志

或者有什么其他的命令可以实现这一点?


回答:

加上 tail 参数,从后面开始打印 docker-compose logs --tail=200 -f


回答:

除了用 tail 参数,还可以用 since 指定一个开始时间。

以上是 docker-compose logs 命令如何实现只读取新增量的日志? 的全部内容, 来源链接: utcz.com/p/938192.html

回到顶部