2016-12-14 967 views
19

我想将我的docker容器的所有日志重定向到单个日志文件以分析它们。我试过如何将docker日志重定向到单个文件?

docker logs container > /tmp/stdout.log 2>/tmp/stderr.log 

但是这给出了登录两个不同的文件。我已经试过

docker logs container > /tmp/stdout.log 

但它没有工作。

回答

28

无需重定向日志。

默认情况下,Docker将日志存储到一个日志文件。要检查日志文件路径运行命令:

docker inspect --format='{{.LogPath}}' containername 

/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log 

打开该日志文件并进行分析。

如果您重定向日志,那么您将只在重定向之前获取日志。您将无法看到实时日志。

编辑:

要查看你可以在下面的命令,运行实时日志

tail -f `docker inspect --format='{{.LogPath}}' containername` 

注:

此日志文件/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log将创建只有当搬运工生成日志有是没有日志,那么这个文件将不会在那里。如果我们运行命令docker logs containername,它有点类似,它什么也不返回。在这种情况下,这个文件将不可用。

+0

'尾巴检查--format = '{{} LOGPATH}' MYAPP \'' - 这真的是JSON – Adam

+0

它会失败如果该文件不存在。意味着如果docker不生成任何日志,那么这个文件将不会被创建。但是如果docker生成日志,那么这个命令很适合查看实时日志。感谢Adam。将其添加到我的答案以帮助其他人。 –

29

这个怎么样选项:

docker logs contaiername >& logs/myFile.log

我希望这可以帮助别人。

对我来说非常有用。

+0

如果我没有错,这个命令基本上会复制从启动容器到myFile.logs的所有日志。对。? –

+0

@SAndrew基本上是的!但Docker的新版本可能会发生变化。更好地看到'码头日志 - 帮助'确定 –

4

这对我的作品:

docker logs <options> containername >& logs/myFile.log

+0

您发布了这个答案后我的大声笑 –

+0

重复下面的答案,可能需要删除。 – toddcscar

1

假设你有多个容器,要日志合并为一个文件,你需要使用像fluentd一些日志聚合器。作为docker容器的日志驱动程序,支持fluentd。

因此,在泊坞窗,撰写,您需要定义日志司机

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> 

在此配置中,我们要求将日志写入到此路径的单个文件中
/fluentd/log/service/service.*.log

,第三步是运行自定义的fluentd,它将开始将日志写入文件。

这里是link for step by step instructions

有点长,但正确的做法,因为当你跨过日志文件路径等更多的控制和它码头工人群的作品也很好。

1

docker logs -f <yourContainer> > your.log &

说明:

  • -f(即--follow):写入所有现有日志并继续(如下)下次来记录一切。
  • 可能你想在后台运行该方法,因此可以使用&
  • 你可以单独通过输出和标准错误:-f \`泊坞窗> output.log 2> error.log