Supondo que você tenha vários contêineres e queira agregar os logs em um único arquivo, você precisa usar algum agregador de log como fluentd. fluentd é compatível como driver de registro para contêineres docker.
Portanto, em docker-compose, você precisa definir o driver de registro
service1:
image: webapp:0.0.1
logging:
driver: "fluentd"
options:
tag: service1
service2:
image: myapp:0.0.1
logging:
driver: "fluentd"
options:
tag: service2
A segunda etapa seria atualizar o fluentd conf para fornecer os logs para o serviço 1 e o serviço 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>
Nesta configuração, estamos pedindo que os logs sejam gravados em um único arquivo para este caminho
/fluentd/log/service/service.*.log
e a terceira etapa seria executar o fluentd personalizado, que começará a gravar os logs no arquivo.
Aqui está o link para instruções passo a passo
Um pouco longo, mas da maneira correta, já que você obtém mais controle sobre o caminho dos arquivos de log, etc., e funciona bem no Docker Swarm também.
tail -f `docker inspect --format='{{.LogPath}}' myapp`
- é realmente JSON