日志记录驱动程序

预计阅读时间:5分钟

journald日志驱动程序发送容器日志的 systemd日记。可以使用journalctl命令,使用journalAPI或命令 来检索日志条目docker logs

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

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

用法

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

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

{
  "log-driver": "journald"
}

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

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

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

选项

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

选项 必需的 描述
tag 可选的 指定要在日记日志中设置CONTAINER_TAGSYSLOG_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

使用journalAPI检索日志消息

本示例使用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)
日志泊坞窗日志驱动程序