Journald 日志记录驱动程序

日志记录驱动程序journald将容器日志发送到 systemd日志。可以使用该journalctl命令、通过使用 journalAPI 或使用该docker logs命令来检索日志条目。

除了日志消息本身的文本之外,journald日志驱动程序还将以下元数据与每条消息一起存储在日志中:

场地描述
CONTAINER_ID容器 ID 被截断为 12 个字符。
CONTAINER_ID_FULL完整的 64 字符容器 ID。
CONTAINER_NAME启动时的容器名称。如果您使用docker rename重命名容器,新名称不会反映在日记帐分录中。
CONTAINER_TAG,SYSLOG_IDENTIFIER容器标签( 日志标签选项文档)。
CONTAINER_PARTIAL_MESSAGE标记日志完整性的字段。改进长日志行的记录。

用法

要将journald驱动程序用作默认日志记录驱动程序,请将log-driverlog-opts键设置为文件中的适当值daemon.json,该文件位于/etc/docker/Linux 主机或 C:\ProgramData\docker\config\daemon.jsonWindows Server 上。有关使用配置 Docker 的更多信息daemon.json,请参阅 daemon.json

以下示例将日志驱动程序设置为journald

{
  "log-driver": "journald"
}

重新启动 Docker 以使更改生效。

要为特定容器配置日志记录驱动程序,请使用命令--log-driver 上的标志docker run

$ docker run --log-driver=journald ...

选项

使用该--log-opt NAME=VALUE标志指定其他journald日志记录驱动程序选项。

选项必需的描述
tag选修的指定要在日志日志中设置的模板CONTAINER_TAG和值。SYSLOG_IDENTIFIER请参阅 日志标签选项文档来自定义日志标签格式。
labels选修的以逗号分隔的标签键列表,如果为容器指定了这些标签,则应将其包含在消息中。
labels-regex选修的与标签相似且兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级  日志标记选项
env选修的以逗号分隔的环境变量键列表,如果为容器指定了这些变量,则应将其包含在消息中。
env-regex选修的与 类似并兼容env。用于匹配与日志记录相关的环境变量的正则表达式。用于高级  日志标记选项

label如果和选项之间发生冲突env,则 的值env 优先。每个选项都会向日志消息的属性添加附加字段。

以下是记录到日志所需的日志记录选项的示例。

$ docker run \
    --log-driver=journald \
    --log-opt labels=location \
    --log-opt env=TEST \
    --env "TEST=false" \
    --label location=west \
    your/application

此配置还指示驱动程序在有效负载中包含标签位置和环境变量TEST。如果省略--env "TEST=false"--label location=west参数,则不会在日志日志中设置相应的键。

关于容器名称的注意事项

该字段中记录的值CONTAINER_NAME是启动时设置的容器的名称。如果您使用docker rename重命名容器,新名称不会反映在日记帐分录中。日记条目继续使用原来的名称。

使用journalctl检索日志消息

使用该journalctl命令检索日志消息。您可以应用过滤器表达式将检索到的消息限制为与特定容器关联的消息:

$ sudo journalctl CONTAINER_NAME=webserver

您可以使用其他过滤器来进一步限制检索到的消息。该-b 标志仅检索自上次系统启动以来生成的消息:

$ sudo journalctl -b CONTAINER_NAME=webserver

-o标志指定重试日志消息的格式。用于-o json 以 JSON 格式返回日志消息。

$ sudo journalctl -o json CONTAINER_NAME=webserver

查看启用了 TTY 的容器的日志

如果在容器上启用了 TTY,您可能会[10B blob data]在检索日志消息时在输出中看到。原因是\r附加到行尾并且 journalctl不会自动删除它,除非--all设置:

$ sudo journalctl -b CONTAINER_NAME=webserver --all

使用日志 API 检索日志消息

此示例使用systemdPython 模块检索容器日志:

import systemd.journal

reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')

for msg in reader:
    print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)