2016-12-14 84 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
相關問題