日志日志记录驱动程序
日志记录驱动程序将容器日志发送到 systemd
日志。
可以使用命令、使用 API 或命令来检索日志条目。journald
journalctl
journal
docker logs
除了日志消息本身的文本外,日志驱动程序
将以下元数据与每条消息一起存储在日志中:journald
田 | 描述 |
---|---|
CONTAINER_ID | 容器 ID 被截断为 12 个字符。 |
CONTAINER_ID_FULL | 完整的 64 个字符的容器 ID。 |
CONTAINER_NAME | 启动容器时的名称。如果您用于重命名容器,则新名称不会反映在日志条目中。docker rename |
CONTAINER_TAG ,SYSLOG_IDENTIFIER | 容器标签( log tag option documentation)。 |
CONTAINER_PARTIAL_MESSAGE | 标记日志完整性的字段。改进长日志行的日志记录。 |
IMAGE_NAME | 容器镜像的名称。 |
用法
要将驱动程序用作默认日志记录驱动程序,请在文件中将 和 键设置为适当的值,即
位于 Linux 主机或 Windows Server 上。有关
使用 配置 Docker,请参阅 daemon.json。journald
log-driver
log-opts
daemon.json
/etc/docker/
C:\ProgramData\docker\config\daemon.json
daemon.json
以下示例将日志驱动程序设置为:journald
{
"log-driver": "journald"
}
重新启动 Docker 以使更改生效。
要为特定容器配置日志记录驱动程序,请在命令中使用 flag。--log-driver
docker run
$ docker run --log-driver=journald ...
选项
使用标志指定其他日志记录
驱动程序选项。--log-opt NAME=VALUE
journald
选择 | 必填 | 描述 |
---|---|---|
tag | 自选 | 指定要在 journald logs 中设置的模板和值。请参阅 log tag option 文档以自定义日志标签格式。CONTAINER_TAG SYSLOG_IDENTIFIER |
labels | 自选 | 以逗号分隔的标签键列表,如果为容器指定了这些标签,则应包含在 message 中。 |
labels-regex | 自选 | 与 labels 类似并兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项。 |
env | 自选 | 以逗号分隔的环境变量键列表,如果为容器指定了这些变量,则应包含在 message 中。 |
env-regex | 自选 | 与 类似并兼容。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项。env |
如果 and 选项之间发生冲突,则 the 的值优先。每个选项都会向
logging 消息。label
env
env
以下是记录到 journald 所需的日志记录选项的示例。
$ docker run \
--log-driver=journald \
--log-opt labels=location \
--log-opt env=TEST \
--env "TEST=false" \
--label location=west \
your/application
此配置还指示驱动程序在有效负载中包含标签
location 和环境变量 .如果省略 or 参数,则相应的键将
未在 journald log 中设置。TEST
--env "TEST=false"
--label location=west
关于容器名称的注意事项
字段中记录的值是容器的名称,该容器
在启动时设置。如果您用于重命名容器,则新的
name 不会反映在 journal entries 中。日记条目继续
以使用原始名称。CONTAINER_NAME
docker rename
使用 journalctl
检索日志消息
使用命令检索日志消息。您可以应用过滤器
表达式将检索到的消息限制为与特定
容器:journalctl
$ sudo journalctl CONTAINER_NAME=webserver
您可以使用其他筛选条件来进一步限制检索的消息。该标志仅检索自上次系统引导以来生成的消息:-b
$ sudo journalctl -b CONTAINER_NAME=webserver
该标志指定检索到的日志消息的格式。用于以 JSON 格式返回日志消息。-o
-o json
$ sudo journalctl -o json CONTAINER_NAME=webserver
查看启用了 TTY 的容器的日志
如果在容器上启用了 TTY,您可能会在输出中看到
检索日志消息时。
这样做的原因是它被附加到行尾,除非设置,否则不会自动剥离它:[10B blob data]
\r
journalctl
--all
$ sudo journalctl -b CONTAINER_NAME=webserver --all
使用日志
API 检索日志消息
此示例使用 Python 模块检索容器
原木:systemd
import systemd.journal
reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')
for msg in reader:
print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)