Skip to content

journalctl does not respect --all with json output #3416

@bobrik

Description

@bobrik

Debian Jessie, stock or testing systemd:

# journalctl --version
systemd 230
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN

Related Docker issue: moby/moby#15722

Somewhat related systemd issue: #1460

Stock journalctl outputs:

{
    "__CURSOR" : "s=5d26294b5919405f962545870aae8d16;i=be3105;b=b959b49e885b4c10b502ffaf4e46c96b;m=296eeec21a8;t=53438668c4bae;x=eeef85e9c70c25f9",
    "__REALTIME_TIMESTAMP" : "1464791726836654",
    "__MONOTONIC_TIMESTAMP" : "2847276802472",
    "_BOOT_ID" : "b959b49e885b4c10b502ffaf4e46c96b",
    "_TRANSPORT" : "journal",
    "_PID" : "18509",
    "_UID" : "0",
    "_GID" : "0",
    "_COMM" : "docker",
    "_EXE" : "/usr/bin/docker",
    "_CMDLINE" : "/usr/bin/docker daemon -H fd:// --storage-driver overlay --exec-opt native.cgroupdriver=systemd --log-driver journald",
    "_CAP_EFFECTIVE" : "3fffffffff",
    "_SYSTEMD_CGROUP" : "/system.slice/docker.service",
    "_SYSTEMD_UNIT" : "docker.service",
    "_SYSTEMD_SLICE" : "system.slice",
    "_MACHINE_ID" : "327881646f66435f8402208ed69def74",
    "_HOSTNAME" : "myhost",
    "PRIORITY" : "6",
    "CONTAINER_ID" : "17fb289f439b",
    "CONTAINER_ID_FULL" : "17fb289f439b3a5bb5dc04bad06dc23d12b096f98ca6d70ebff001a22a3d6f1e",
    "CONTAINER_NAME" : "backstabbing_davinci",
    "CONTAINER_TAG" : "wtf",
    "MESSAGE" : [ 87, 101, 100, 32, 74, 117, 110, 32, 32, 49, 32, 49, 52, 58, 51, 53, 58, 50, 54, 32, 85, 84, 67, 32, 50, 48, 49, 54, 13 ],
    "_SOURCE_REALTIME_TIMESTAMP" : "1464791726836197"
}

With a little patch (expected behavior):

{
    "__CURSOR" : "s=5d26294b5919405f962545870aae8d16;i=be3105;b=b959b49e885b4c10b502ffaf4e46c96b;m=296eeec21a8;t=53438668c4bae;x=eeef85e9c70c25f9",
    "__REALTIME_TIMESTAMP" : "1464791726836654",
    "__MONOTONIC_TIMESTAMP" : "2847276802472",
    "_BOOT_ID" : "b959b49e885b4c10b502ffaf4e46c96b",
    "_TRANSPORT" : "journal",
    "_PID" : "18509",
    "_UID" : "0",
    "_GID" : "0",
    "_COMM" : "docker",
    "_EXE" : "/usr/bin/docker",
    "_CMDLINE" : "/usr/bin/docker daemon -H fd:// --storage-driver overlay --exec-opt native.cgroupdriver=systemd --log-driver journald",
    "_CAP_EFFECTIVE" : "3fffffffff",
    "_SYSTEMD_CGROUP" : "/system.slice/docker.service",
    "_SYSTEMD_UNIT" : "docker.service",
    "_SYSTEMD_SLICE" : "system.slice",
    "_MACHINE_ID" : "327881646f66435f8402208ed69def74",
    "_HOSTNAME" : "36com79",
    "PRIORITY" : "6",
    "CONTAINER_ID" : "17fb289f439b",
    "CONTAINER_ID_FULL" : "17fb289f439b3a5bb5dc04bad06dc23d12b096f98ca6d70ebff001a22a3d6f1e",
    "CONTAINER_NAME" : "backstabbing_davinci",
    "CONTAINER_TAG" : "wtf",
    "MESSAGE" : "Wed Jun  1 14:35:26 UTC 2016\u000d",
    "_SOURCE_REALTIME_TIMESTAMP" : "1464791726836197"
}

Little patch mentioned earlier:

diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index 9351b85..6b4c957 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -607,7 +607,7 @@ void json_escape(
         if (!(flags & OUTPUT_SHOW_ALL) && l >= JSON_THRESHOLD)
                 fputs("null", f);

-        else if (!utf8_is_printable(p, l)) {
+        else if (!utf8_is_printable(p, l) && !(flags & OUTPUT_SHOW_ALL)) {
                 bool not_first = false;

                 fputs("[ ", f)

\r looks perfectly printable unicode character to me:

# ./journalctl -a -n1 -o json-pretty CONTAINER_TAG=wtf | jq .MESSAGE
"Wed Jun  1 14:35:26 UTC 2016\r"
# ./journalctl -a -n1 -o json-pretty CONTAINER_TAG=wtf | jq -r .MESSAGE
Wed Jun  1 14:35:26 UTC 2016

I've seen the issue happening with docker containers running without tty (no \r at the end), but I can't find an example right now.

It seems that:

  • Whitespace-ish \r is not stripped, while it should be.
  • Printable \r is considered unprintable.
  • --all is not respected for json.

My patch only addresses the latter. Should I make a PR?

cc @dqminh, @evverx

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug 🐛Programming errors, that need preferential fixingjournal

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions