使用 docker logs 命令配合 --format 参数可以实现容器日志的格式化输出。通过指定 go 模板语法,可以提取时间戳、容器 id、消息内容等字段,并将结果拼接为标准的 json 对象字符串,从而方便后续程序解析或日志聚合。

如何提取时间戳和日志消息并组合成 JSON 对象
要生成包含时间戳和消息内容的 JSON 日志,可以使用 .Timestamp 和 .Log 属性。在模板中,利用双引号包裹键名,并使用 | json 过滤器自动处理日志消息中的特殊字符(如换行符、引号),确保生成的 JSON 格式合法且可被标准解析器读取。

docker logs --tail 10 --timestamps --format '{{json .}}' <container_name>上述命令中,--timestamps 确保日志中包含时间信息,--format '{{json .}}' 将整个日志条目序列化为 JSON 对象。输出示例如下:
{"time":"2023-10-27T10:00:00.000000000Z","log":"Hello World"}如何自定义 JSON 结构以包含容器元数据
除了基础日志内容,还可以将容器 ID 和名称等元数据加入 JSON 结构中。通过访问 .ContainerID 和 .ContainerName 属性,可以构建更丰富的日志记录,便于在多容器环境中追踪特定实例的日志来源。

docker logs --tail 5 --format '{"container_id":"{{.ContainerID}}","name":"{{.ContainerName}}","message":"{{.Log}}"}' <container_name>该命令手动构造 JSON 字符串,其中 .ContainerID 和 .ContainerName 分别填入容器标识,.Log 填入日志内容。注意:如果日志内容包含双引号,需手动转义或使用 | json 过滤器。例如:
{"container_id":"abc123","name":"my_app","message":"Error: invalid input"}当日志消息包含特殊字符时如何处理 JSON 序列化
若日志消息中包含双引号、反斜杠或换行符,直接拼接会导致 JSON 格式错误。此时应使用 | json 过滤器对 .Log 进行编码,它会自动转义这些字符,保证输出的 JSON 字符串完整有效。
docker logs --tail 1 --format '{"msg": {{.Log | json}}}' <container_name>假设日志内容为:He said "hello",使用 | json 后输出为:{"msg": "He said \"hello\""},符合 JSON 规范。若不使用该过滤器,输出将因未转义的双引号而失效。


















