轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像
交易
充值流量¥7起我的订单
文档
工具
提交工单页面收录
journald-plus

baraverkstad/journald-plus

baraverkstad

Docker journald日志驱动插件,支持多行日志合并、优先级解析、JSON日志结构化提取及容器元数据记录,轻量高效且兼容内置journald驱动的所有元数据字段。

下载次数: 0状态:社区镜像维护者:baraverkstad仓库类型:镜像最近更新:10 天前
让 AI 帮你使用轩辕镜像? · 展开查看说明 · 点击收起说明

如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这句话即可:

请先完整阅读并严格遵守以下文档中的全部规则与要求:

https://xuanyuan.cloud/agents.md

在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

中文简介
下载命令
镜像标签列表与下载命令
轩辕镜像,加速的不只是镜像。
点击查看

Docker Journald Plus

Docker Journald Plus是一个Docker托管的日志驱动插件(v2版本),通过docker plugin install安装,提供多行日志合并、优先级解析、JSON日志结构化处理等增强功能,同时保留内置journald驱动的容器元数据字段,且占用空间极小(压缩后仅1.7MB)。可在Docker Hub获取:https://hub.docker.com/r/baraverkstad/journald-plus%EF%BC%8C%E6%9B%B4%E5%A4%9A%E4%BF%A1%E6%81%AF%E8%A7%81GitHub%E4%BB%93%E5%BA%93%EF%BC%9Ahttps://github.com/baraverkstad/docker-journald-plus%E3%80%82

核心功能

  • 多行日志合并:根据可配置的正则模式,将连续日志行合并为单个journal条目
  • 优先级检测:通过sd-daemon <N>前缀或自定义正则模式从日志内容中推断优先级
  • JSON日志解析:可选的结构化解析,从JSON日志中提取级别、消息及自定义字段
  • 完整元数据字段:保留内置驱动的所有容器元数据(CONTAINER_ID、CONTAINER_NAME、IMAGE_NAME等)
  • 轻量占用:插件镜像仅7.4MB(压缩后1.7MB)

与内置journald驱动对比

功能内置journald驱动journald-plus
元数据字段是是
默认标签{{.ID}}{{.Name}}
多行日志合并否是
优先级检测否是
JSON日志解析否是
docker logs支持是(通过journald)是(通过本地缓存)1

1:Docker会为不支持日志读取API的插件自动启用有限的https://docs.docker.com/engine/logging/dual-logging/%E5%8A%9F%E8%83%BD%E3%80%82%E4%B8%BA%E5%AE%9E%E7%8E%B0%E8%BD%BB%E9%87%8F%E5%8D%A0%E7%94%A8%EF%BC%8Cjournald-plus%E7%9C%81%E7%95%A5%E4%BA%86%E8%AF%A5%E5%8A%9F%E8%83%BD%EF%BC%8C%E5%BB%BA%E8%AE%AE%E4%BD%BF%E7%94%A8%60journalctl%60%E6%9F%A5%E7%9C%8B%E5%A4%84%E7%90%86%E5%90%8E%E7%9A%84%E6%97%A5%E5%BF%97%E8%BE%93%E5%87%BA%E3%80%82

输出字段

每个日志条目会写入journald并包含以下字段:

字段描述
MESSAGE合并及前缀剥离后的日志消息
PRIORITY数字型syslog优先级(0-7)
SYSLOG_IDENTIFIER标签值
SYSLOG_TIMESTAMPDocker提供的RFC 3339格式时间戳
CONTAINER_ID短容器ID(12字符)
CONTAINER_ID_FULL完整容器ID
CONTAINER_NAME容器名称
CONTAINER_TAG格式化标签
IMAGE_NAME容器镜像名称

此外还包含以下来源的字段:

  • labels/labels-regex:继承自内置驱动的标签选项
  • env/env-regex:继承自内置驱动的环境变量选项
  • field-*:字段提取功能生成的自定义字段
  • json-parse:JSON日志解析生成的字段

使用方法

基本运行示例

bash
docker run --name myapp \
  --log-driver baraverkstad/journald-plus:[VERSION] \
  --log-opt json-parse=true \
  myimage

Docker Compose示例

yaml
services:
  app:
    image: myapp:latest
    logging:
      driver: baraverkstad/journald-plus:[VERSION]
      options:
        json-parse: "true"

设置为默认驱动(/etc/docker/daemon.json)

json
{
  "log-driver": "baraverkstad/journald-plus:[VERSION]",
  "log-opts": {
    "json-parse": "true"
  }
}

👉 查看配置部分获取所有可用选项。

日志读取

docker logs从本地缓存读取原始输出(无合并或解析)。如需查看完整处理后的条目,请使用journalctl:

bash
journalctl -t myapp -f                # 实时跟踪(类似tail -f)
journalctl -t myapp -p warning        # 查看警告及以上级别日志
journalctl -t myapp --since -1h       # 查看最近1小时日志
journalctl CONTAINER_ID=abc123def456  # 按容器ID过滤
journalctl REQUEST_ID=abc123          # 按JSON或field-*生成的自定义字段过滤

高级示例

JSON日志解析

使用默认键解析JSON日志:

bash
docker run --log-driver baraverkstad/journald-plus:[VERSION] \
  --log-opt json-parse=true \
  myapp

应用输出JSON日志:

json
{
  "level": "error",
  "message": "database connection failed",
  "request_id": "abc123",
  "retry_count": 3
}

解析结果:

  • MESSAGE=database connection failed
  • PRIORITY=3(错误级别)
  • JSON_REQUEST_ID=abc123
  • JSON_RETRY_COUNT=3

自定义非标准格式的键名(如OpenTelemetry):

bash
--log-opt json-level-keys='severity,lvl' \
--log-opt json-message-keys='body,text'

跳过高基数字段并将剩余字段内联到消息中:

bash
--log-opt json-skip-keys='ts,time,@timestamp' \
--log-opt json-extra=inline

字段提取

通过正则捕获组从日志消息中提取journal字段:

bash
docker run --log-driver baraverkstad/journald-plus:[VERSION] \
  --log-opt field-REQUEST_ID='request_id=([a-z0-9]+)' \
  --log-opt field-USER_ID='user=(\d+)' \
  --log-opt field-TRACE_ID='trace[:\s]+([a-f0-9]{32})' \
  myapp

Docker Compose中按服务配置:

yaml
services:
  api:
    image: myapi:latest
    logging:
      driver: baraverkstad/journald-plus:[VERSION]
      options:
        field-REQUEST_ID: "request_id=([a-z0-9]+)"
        field-USER_ID: 'user=(\d+)'
  worker:
    image: myworker:latest
    logging:
      driver: baraverkstad/journald-plus:[VERSION]
      options:
        field-JOB_ID: "job=([0-9]+)"

Daemon.json配置(需转义反斜杠):

json
{
  "log-driver": "baraverkstad/journald-plus:[VERSION]",
  "log-opts": {
    "field-REQUEST_ID": "request_id=([a-z0-9]+)",
    "field-USER_ID": "user=(\\d+)"
  }
}

安装

bash
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
docker plugin install --alias baraverkstad/journald-plus:[VERSION] \
  baraverkstad/journald-plus:[VERSION]-$ARCH

别名baraverkstad/journald-plus:[VERSION]用于在daemon.json、compose.yml或--log-driver中引用。请勿直接使用架构特定的标签,仅别名可跨机器移植。

👉 无latest标签发布。如需最新构建且不固定版本,可使用latest-amd64或latest-arm64,但请注意这会增加升级难度。

升级

正在运行的容器使用的插件无法直接禁用或升级。版本化别名模式允许两个版本共存以实现零停机迁移:

  1. 安装新版本并设置新别名:
    bash
    ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
    docker plugin install --alias baraverkstad/journald-plus:[NEW-VERSION] \
      baraverkstad/journald-plus:[NEW-VERSION]-$ARCH
    
  2. 更新daemon.json或compose.yml以引用新别名。
  3. 若使用daemon.json,重启dockerd以应用新默认驱动。
  4. 重新创建服务以逐个切换到新别名。
  5. 当无容器引用旧别名时,删除旧版本:
    bash
    docker plugin disable baraverkstad/journald-plus:[OLD-VERSION]
    docker plugin rm baraverkstad/journald-plus:[OLD-VERSION]
    

配置

选项默认值所属章节
tag{{.Name}}继承选项
labels(无)继承选项
labels-regex(无)继承选项
env(无)继承选项
env-regex(无)继承选项
field-FIELDNAME(无)字段提取
multiline-regex^\s多行日志
multiline-timeout10ms多行日志
multiline-max-lines100多行日志
multiline-max-bytes1048576多行日志
multiline-separator\n多行日志
priority-prefixtrue优先级
priority-default-stdoutinfo优先级
priority-default-stderrerr优先级
priority-match-emerg(无)优先级
priority-match-alert(无)优先级
priority-match-crit(正则)优先级
priority-match-err(正则)优先级
priority-match-warning(正则)优先级
priority-match-notice(无)优先级
priority-match-info(无)优先级
priority-match-debug(正则)优先级
strip-timestampfalse时间戳剥离
strip-timestamp-regex(正则)时间戳剥离
strip-priorityfalse优先级剥离
strip-priority-regex(正则)优先级剥离
normalize-whitespacefalse空白符规范化
json-parsefalseJSON日志解析
json-level-keyslevel,severity,log_levelJSON日志解析
json-message-keysmessage,msg,logJSON日志解析
json-skip-keys(无)JSON日志解析
json-extrafieldsJSON日志解析

继承选项

选项默认值描述
tag{{.Name}}SYSLOG_IDENTIFIER的模板,支持Go模板语法
labels(无)需包含为journal字段的容器标签键
labels-regex(无)需包含为journal字段的容器标签键(正则匹配)
env(无)需包含为journal字段的容器环境变量键
env-regex(无)需包含为journal字段的容器环境变量键(正则匹配)

标签模板变量:

变量描述示例
{{.Name}}容器名称mycontainer
{{.ID}}短容器ID(12字符)abcdef123456
{{.FullID}}完整容器IDabcdef123456...
{{.ImageName}}镜像名称nginx:latest
{{.ImageID}}短镜像ID(12字符)deadbeef1234
{{.ImageFullID}}完整镜像IDsha256:deadbeef...
{{.Command}}入口点+参数nginx -g daemon off
{{.DaemonName}}Docker守护进程名称docker

示例:--log-opt tag="{{.ImageName}}/{{.Name}}"

👉 内置journald驱动默认标签为{{.ID}}(短容器ID),本插件默认使用{{.Name}}(容器名称),更便于journalctl -t查询。

字段名称 sanitization: 标签和环境变量名称会转换为journald兼容格式:小写转大写,非字母数字字符转为_,以数字开头的名称前缀加_。例如,标签com.example.my-app会转为COM_EXAMPLE_MY_APP。

字段提取

选项描述
field-FIELDNAME通过正则捕获组提取journal字段1

1:选项名称为字段名(如field-REQUEST_ID),值为包含一个捕获组(...)的正则表达式。可使用多个field-*选项。

👉 查看高级示例了解用法。

多行日志

选项默认值描述
multiline-regex^\s匹配续行的正则表达式1
multiline-timeout10ms刷新前的最大等待时间(Go duration格式)2
multiline-max-lines100合并为单个条目的最大行数
multiline-max-bytes1048576合并条目的最大字节数(1MB)
multiline-separator\n合并行之间插入的分隔符

1:匹配该模式的行将追加到前一条消息。设为空字符串可禁用多行合并。
2:支持Go duration格式:10ms、100ms、1s。

默认^\s模式匹配以空白开头的行,可处理Java堆栈跟踪(at com.example.Foo续行缩进)和Python回溯(帧行以空格开头)。

优先级

选项默认值描述
priority-prefixtrue启用sd-daemon <N>前缀(0-7)1
priority-default-stdoutinfostdout的默认优先级
priority-default-stderrerrstderr的默认优先级
priority-match-emerg(无)匹配首行→EMERG(0)
priority-match-alert(无)匹配首行→ALERT(1)
priority-match-crit(正则)2匹配首行→CRIT(2)
priority-match-err(正则)2匹配首行→ERR(3)
priority-match-warning(正则)2匹配首行→WARNING(4)
priority-match-notice(无)匹配首行→NOTICE(5)
priority-match-info(无)匹配首行→INFO(6)
priority-match-debug(正则)2匹配首行→DEBUG(7)

1:<N>前缀会在写入journal前从MESSAGE中剥离,详见https://www.freedesktop.org/software/systemd/man/latest/sd-daemon.html%E3%80%82%5C 2:默认正则模式(允许关键字前最多30字符前缀):

  • priority-match-crit: ^.{0,30}(CRITICAL|\[Critical\])
  • priority-match-err: ^.{0,30}(ERROR|FATAL|\[ERROR\]|\[Fatal\])
  • priority-match-warning: ^.{0,30}(WARN|WARNING|\[Warning\])
  • priority-match-debug: ^.{0,30}(DEBUG|\[Debug\])

优先级解析顺序(优先匹配靠前的规则):

  1. sd-daemon <N>前缀(若priority-prefix=true)
  2. priority-match-*正则模式(从emerg到debug检查)
  3. 默认值:priority-default-stdout或priority-default-stderr

优先级名称

priority-default-stdout和priority-default-stderr支持以下值:emerg、alert、crit、err、warning、notice、info、debug。

时间戳剥离

选项默认值描述
strip-timestampfalse剥离开头的时间戳1
strip-timestamp-regex(正则)覆盖内置正则2

1:journald会记录自身时间戳,应用级时间戳通常冗余。
2:仅当strip-timestamp=true时生效。

启用后,时间戳会在优先级检测前剥离。默认优先级模式允许最多30字符前缀,可处理时间戳剥离后剩余的其他前缀。例如,MariaDB日志2026-02-15 15:15:16 0 [Warning] InnoDB:...剥离后变为0 [Warning] InnoDB:...,仍可匹配[Warning]模式。

内置模式支持以下格式:

格式示例
ISO 86012024-01-15T10:30:45Z、2024-01-15 10:30:45 UTC
Go日志格式2024/01/15 10:30:45
Syslog格式Jan 15 10:30:45
Apache/nginx CLF15/Oct/2024:10:30:45 +0200
Log4j DATE格式14 Nov 2017 20:30:20,434
Apache错误格式Wed Oct 15 19:41:46.123456 2019

时间戳后的分隔符(空白、-、|、:)也会被剥离。时区缩写仅限Z/UTC/GMT,避免误匹配ERROR或WARN等日志级别词。

优先级剥离

选项默认值描述
strip-priorityfalse剥离开头的日志级别1
strip-priority-regex(正则)覆盖内置正则2

1:日志级别同时存在于PRIORITY字段和MESSAGE中通常冗余。
2:仅当strip-priority=true时生效。

启用后,开头的日志级别关键词会在优先级检测后剥离。默认正则匹配消息开头的常见级别关键词(可选带括号):

(?i)^\[?(trace|debug|info|notice|note|warning|warn|critical|error|fatal|alert|emerg)\]?

匹配后的分隔符(空白、-、|、:)也会被剥离。由于正则锚定到^,仅多行合并消息的首行受影响,续行不会被修改。

输入剥离后结果
INFO request completedrequest completed
[Error] connection refusedconnection refused
WARN: disk space lowdisk space low

空白符规范化

选项默认值描述
normalize-whitespacefalse规范化制表符和连续空格1

1:将一个或多个制表符(或两个及以上连续空格)替换为单个空格。在处理流程最后一步应用(时间戳剥离和优先级检测/剥离之后)。

输入规范化后结果
INFO\t\tStarting serverINFO Starting server
ERROR connection refusedERROR connection refused
[WARN]\t disk space low[WARN] disk space low

JSON日志解析

选项默认值描述
json-parsefalse将日志行解析为JSON对象
json-level-keyslevel,severity,log_level日志级别对应的JSON键(优先匹配靠前的)
json-message-keysmessage,msg,log消息体对应的JSON键(优先匹配靠前的)
json-skip-keys(无)完全忽略的JSON键
json-extrafields剩余字段的处理方式1

1:fields(默认):存储为JSON_*journal字段;inline:追加到MESSAGE中。

当json-parse=true时,驱动尝试解析每条日志行为JSON对象:

  1. 级别提取:检查json-level-keys(按顺序)并映射为syslog优先级
  2. 消息提取:检查json-message-keys(按顺序)并作为MESSAGE值
  3. 跳过键:丢弃json-skip-keys中的键
  4. 剩余字段:存储为JSON_*journal字段(json-extra=fields)或追加到消息中(json-extra=inline);为空则忽略
  5. 优雅降级:若解析失败或无消息键,使用原始行

支持的级别映射:

JSON级别Syslog优先级
debug, traceDEBUG(7)
info, informationINFO(6)
noticeNOTICE(5)
warn, warningWARNING(4)
error, errERR(3)
fatal, critical, critCRIT(2)
panic, alertALERT(1)
emerg, emergencyEMERG(0)

级别字符串不区分大小写。

👉 查看高级示例了解用法。

行为说明:

  • 字段名称会转换为journald兼容格式(大写,特殊字符转为_)
  • 嵌套JSON对象/数组会序列化为JSON字符串
  • 空值会被忽略
  • 解析失败时,原始行将被原样记录(无数据丢失)
  • 禁用时无额外开销(仅一次布尔检查)

贡献

欢迎提出想法、bug报告和PR。查看DEVELOPMENT.md获取构建说明、测试及开发流程。

许可证

Docker Journald Plus基于MIT许可证开源。

版权所有 © 2026 Per Cederberg

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

轩辕镜像加速拉取命令点我查看更多 journald-plus 镜像标签

docker pull docker.xuanyuan.run/baraverkstad/journald-plus:<标签>

使用方法:

  • 登录认证方式
  • 免认证方式

DockerHub 原生拉取命令

docker pull baraverkstad/journald-plus:<标签>

轩辕镜像配置手册

按平台快速找到配置文档

一键安装

一键安装 Docker

Linux Docker 一键安装

AI

用 AI 使用轩辕镜像

agents.md · AI 对话 · 提示词

Docker

登录仓库拉取

登录认证 · 私有仓库

专属域名拉取

免登录 · 高速拉取

Linux

Docker 镜像配置

Windows / Mac

Docker Desktop 配置

MacOS OrbStack

OrbStack 容器

Apple Container

macOS 原生容器

Docker Compose

Compose 项目配置

NAS

群晖

Synology 配置

飞牛

fnOS 镜像配置

绿联

绿联 NAS

威联通

QNAP 配置

极空间

极空间 NAS

Unraid

Unraid NAS

企业仓库

其他仓库

ghcr · Quay · nvcr

Harbor 镜像源

Proxy Repository 对接

Portainer 镜像源

Registries 配置

Nexus 镜像源

Docker Proxy 缓存

开发工具

Dev Containers

VS Code 开发容器

Podman

Podman 配置指南

Singularity / Apptainer

HPC 科学计算容器

Kubernetes

K8s Containerd

Kubernetes · Containerd

K3s

轻量级集群

面板 / 网络

爱快路由

iKuai 镜像加速

宝塔面板

一键配置镜像源

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

功能

版本功能对比

功能对比 · 版本选择

支持的镜像仓库

Docker Hub · GCR · GHCR

新手拉取配置

登录 · 专属域名 · 配置

docker search 限制

专属域名 · Hub 搜索

不支持 push

仅支持 pull · 不支持

拉取速度原因

带宽 · 缓存 · 冷热镜像

错误码

402 与流量用尽

402 · 流量包 · 充值

401 认证失败

401 · docker login

manifest unknown

标签错误 · 镜像不存在

410 Gone 排查

410 · Docker 升级

429 限流

免费版 · 专业版 · 企业版 · 请求频率

其他报错

DNS 超时

DNS 解析 · 网络超时

TLS 证书失败

no matching manifest(架构)

账号

失败是否计费

manifest · blob · 计费

申请开发票(企业 / 个人)

企业 · 个人 · 工单

修改登录密码

网站 · 仓库 · 重置

注销账户

工单 · 数据 · 注销

原理

mirrors 不生效

daemon.json · 重启

去掉域名前缀

docker tag · 重命名

指定架构拉取

ARM64 · AMD64 · 多架构

latest 与「最新」

digest · 版本号 · 标签

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
baraverkstad/journald-plus
定价查看流量套餐与价格
博客Docker 镜像公告与技术博客
专业版 · 高速稳定拉取镜像
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
50GB 仅 ¥7/年
专业版 · 高速稳定拉取镜像
50GB 仅 ¥7/年
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
用户协议·隐私政策·增值电信业务经营许可证:浙B2-20261007·©2024-2026 源码跳动©2024-2026 杭州源码跳动科技有限公司·商务合作:点击复制邮箱

更多 journald-plus 镜像推荐

apluslms/run-aplus-front logo

apluslms/run-aplus-front

apluslms
运行A-plus学习管理系统前端的Docker容器,暴露8000端口,需连接内容或评估服务(如MOOC-grader)以提供交互式学习内容,适用于学习内容开发和测试部署。
1 次收藏10万+ 次下载
4 天前更新
zoeyvid/npmplus logo

zoeyvid/npmplus

zoeyvid
nginx-proxy-manager的增强分支,提供更丰富的功能和改进,用于简化Nginx代理配置、SSL证书管理及反向代理规则设置,通过直观界面降低管理复杂度。
30 次收藏100万+ 次下载
1 天前更新
dtcenter/metplus-data-dev logo

dtcenter/metplus-data-dev

dtcenter
用于在develop和feature分支上测试METplus开发的数据卷镜像
10万+ 次下载
1 个月前更新
dtcenter/metplus-envs logo

dtcenter/metplus-envs

dtcenter
用于运行需要额外依赖的METplus用例的环境
10万+ 次下载
14 天前更新
dtcenter/metplus-dev logo

dtcenter/metplus-dev

dtcenter
暂无描述
1 次收藏10万+ 次下载
7 天前更新
apluslms/grade-python logo

apluslms/grade-python

apluslms
提供包含特定Python版本的评分环境,该版本已配置在路径中。
1 次收藏1万+ 次下载
1 个月前更新

查看更多 journald-plus 相关镜像