【问题标题】:Understanding docker logs了解 docker 日志
【发布时间】:2021-04-29 07:39:53
【问题描述】:

我们都知道我们可以在日志文件中搜索一个字符串,并将周围的行显示给搜索到的字符串:
grep -AXX -BXX "searched" file.log

可以用 docker logs 命令做同样的事情吗?
我想做的是,如果已经知道我正在搜索的字符串大约在一小时前发生,使用“since”和“after”和“before”,只得到结果而不是所有日志,例如这样的:
docker logs --since=65m -A20 -B5 "搜索到的字符串" [ID]

现在我将所有内容复制到一个文件中,有时会生成一个大文件,并使用 grep:
docker logs --since=65m [ID] >> file.log
grep -AXX -BXX “搜索”文件.log

【问题讨论】:

  • 您可以将输出从docker logs 传送到grepdocker logs --since=65m -A20 -B5 | grep "search string"

标签: docker logging grep


【解决方案1】:

根据文档,您不能。但是,您可以使用管道 grep

docker logs | grep "whatever"

stackoverflow answer for grep

docker documentation about logs

发展替代方案

但是出于开发目的,我使用的是datalust/seq - 只需将图像添加到您的 docker-compose 文件中,并通过小配置(取决于您使用的语言)将日志重定向到漂亮的可搜索门户。

# docker compose 
 seq:
    image: datalust/seq:latest 
    environment:
      - ACCEPT_EULA=Y
    ports:
      - "8082:80"

门户(在http://localhost:8082 下,因为我将默认80 端口从容器重定向到我的8082 端口):

生产替代方案

出于生产目的,我建议使用能够自动从stdoutstderr 收集日志的工具,例如:

为您的应用提供有关日志记录和监控的最高标准。

【讨论】:

    【解决方案2】:

    grep 将在您不给它文件时从标准输入读取。特别是对于docker logs,您需要使用2>&1 表示法将stdout 和stderr 合并在一起。结果如下:

     docker logs --since=65m [ID] 2>&1 | grep -A20 -B5 "searched string"
    

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多