[systemd-devel] [PATCH] query for user unit information in the journal

Daniel Wallace danielwallace at gtmanfred.com
Thu Feb 21 13:39:50 PST 2013


Add --user-unit= to make it possible to query for user logs by the name
of the service.
---
 man/journalctl.xml                          | 11 +++++++++++
 shell-completion/systemd-bash-completion.sh |  5 ++++-
 shell-completion/systemd-zsh-completion.zsh |  1 +
 src/journal/journalctl.c                    | 13 ++++++++++++-
 4 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/man/journalctl.xml b/man/journalctl.xml
index 5ed0e1f..09a96ac 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -306,6 +306,17 @@
                         </varlistentry>
 
                         <varlistentry>
+                                <term><option>--user-unit=</option></term>
+
+                                <listitem><para>Show data only of the
+                                specified user session unit. This will
+                                add a match for
+                                <literal>_SYSTEMD_USER_UNIT=</literal>
+                                for the specified
+                                unit.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
                                 <term><option>-p</option></term>
                                 <term><option>--priority=</option></term>
 
diff --git a/shell-completion/systemd-bash-completion.sh b/shell-completion/systemd-bash-completion.sh
index 1132b3c..117dc55 100644
--- a/shell-completion/systemd-bash-completion.sh
+++ b/shell-completion/systemd-bash-completion.sh
@@ -300,7 +300,7 @@ _journalctl() {
                               -h --help -l --local --new-id128 -m --merge --no-pager
                               --no-tail -q --quiet --setup-keys --this-boot --verify
                               --version --list-catalog --update-catalog'
-                       [ARG]='-D --directory -F --field -o --output -u --unit'
+                       [ARG]='-D --directory -F --field -o --output -u --unit --user-unit'
                 [ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until
                               --verify-key'
         )
@@ -320,6 +320,9 @@ _journalctl() {
                         --unit|-u)
                                 comps=$(journalctl -F '_SYSTEMD_UNIT')
                         ;;
+                        --user-unit)
+                                comps=$(journalctl -F '_SYSTEMD_USER_UNIT')
+                        ;;
                         *)
                                 return 0
                         ;;
diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh
index 177a564..46e29b2 100644
--- a/shell-completion/systemd-zsh-completion.zsh
+++ b/shell-completion/systemd-zsh-completion.zsh
@@ -70,6 +70,7 @@ _ctls()
                 {-c,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
                 {-b,--this-boot}'[Show data only from current boot]' \
                 {-u,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
+                '--user-unit[Show data only from the specified user session unit]:units:_journal_fields _SYSTEMD_USER_UNIT' \
                 {-p,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
                 {-f,--follow}'[Follow journal]' \
                 {-n,--lines=}'[Number of journal entries to show]:integer' \
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 0afeef9..bfea699 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -75,6 +75,7 @@ static usec_t arg_interval = DEFAULT_FSS_INTERVAL_USEC;
 static usec_t arg_since, arg_until;
 static bool arg_since_set = false, arg_until_set = false;
 static const char *arg_unit = NULL;
+static const char *arg_unit_type = NULL;
 static const char *arg_field = NULL;
 static bool arg_catalog = false;
 
@@ -99,6 +100,7 @@ static int help(void) {
                "  -c --cursor=CURSOR     Start showing entries from specified cursor\n"
                "  -b --this-boot         Show data only from current boot\n"
                "  -u --unit=UNIT         Show data only from the specified unit\n"
+               "     --user-unit=UNIT    Show data only from the specified user session unit\n"
                "  -p --priority=RANGE    Show only messages within the specified priority range\n"
                "  -f --follow            Follow journal\n"
                "  -n --lines[=INTEGER]   Number of journal entries to show\n"
@@ -150,6 +152,7 @@ static int parse_argv(int argc, char *argv[]) {
                 ARG_DISK_USAGE,
                 ARG_SINCE,
                 ARG_UNTIL,
+                ARG_USER_UNIT,
                 ARG_LIST_CATALOG,
                 ARG_UPDATE_CATALOG
         };
@@ -179,6 +182,7 @@ static int parse_argv(int argc, char *argv[]) {
                 { "cursor",       required_argument, NULL, 'c'              },
                 { "since",        required_argument, NULL, ARG_SINCE        },
                 { "until",        required_argument, NULL, ARG_UNTIL        },
+                { "user-unit",    required_argument, NULL, ARG_USER_UNIT    },
                 { "unit",         required_argument, NULL, 'u'              },
                 { "field",        required_argument, NULL, 'F'              },
                 { "catalog",      no_argument,       NULL, 'x'              },
@@ -401,8 +405,14 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_until_set = true;
                         break;
 
+                case ARG_USER_UNIT:
+                        arg_unit = optarg;
+                        arg_unit_type = "_SYSTEMD_USER_UNIT=";
+                        break;
+
                 case 'u':
                         arg_unit = optarg;
+                        arg_unit_type = "_SYSTEMD_UNIT=";
                         break;
 
                 case '?':
@@ -568,7 +578,8 @@ static int add_unit(sd_journal *j) {
         if (!u)
                 return log_oom();
 
-        m = strappend("_SYSTEMD_UNIT=", u);
+        m = strappend(arg_unit_type, u);
+
         if (!m)
                 return log_oom();
 
-- 
1.8.1.4



More information about the systemd-devel mailing list