chiark / gitweb /
systemctl: limit logs in status to current boot
[elogind.git] / src / shared / logs-show.c
index 570032121540ab3175d8456cd5a0679a7db8a7df..79a977c156e6c675fbc948d2860169af8d40a2ad 100644 (file)
@@ -278,7 +278,7 @@ static int output_short(
         } else if ((flags & OUTPUT_FULL_WIDTH) || (message_len + n + 1 < n_columns))
                 fprintf(f, ": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
         else if (n < n_columns && n_columns - n - 2 >= 3) {
-                char _cleanup_free_ *e;
+                _cleanup_free_ char *e;
 
                 e = ellipsize_mem(message, message_len, n_columns - n - 2, 90);
 
@@ -304,7 +304,7 @@ static int output_verbose(
 
         const void *data;
         size_t length;
-        char _cleanup_free_ *cursor = NULL;
+        _cleanup_free_ char *cursor = NULL;
         uint64_t realtime;
         char ts[FORMAT_TIMESTAMP_MAX];
         int r;
@@ -366,7 +366,7 @@ static int output_export(
         char sid[33];
         int r;
         usec_t realtime, monotonic;
-        char _cleanup_free_ *cursor = NULL;
+        _cleanup_free_ char *cursor = NULL;
         const void *data;
         size_t length;
 
@@ -495,7 +495,7 @@ static int output_json(
                 OutputFlags flags) {
 
         uint64_t realtime, monotonic;
-        char _cleanup_free_ *cursor = NULL;
+        _cleanup_free_ char *cursor = NULL;
         const void *data;
         size_t length;
         sd_id128_t boot_id;
@@ -931,6 +931,33 @@ int add_matches_for_user_unit(sd_journal *j, const char *unit, uid_t uid) {
         return r;
 }
 
+int add_match_this_boot(sd_journal *j) {
+        char match[9+32+1] = "_BOOT_ID=";
+        sd_id128_t boot_id;
+        int r;
+
+        assert(j);
+
+        r = sd_id128_get_boot(&boot_id);
+        if (r < 0) {
+                log_error("Failed to get boot id: %s", strerror(-r));
+                return r;
+        }
+
+        sd_id128_to_string(boot_id, match + 9);
+        r = sd_journal_add_match(j, match, strlen(match));
+        if (r < 0) {
+                log_error("Failed to add match: %s", strerror(-r));
+                return r;
+        }
+
+        r = sd_journal_add_conjunction(j);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
 int show_journal_by_unit(
                 FILE *f,
                 const char *unit,
@@ -942,7 +969,7 @@ int show_journal_by_unit(
                 OutputFlags flags,
                 bool system) {
 
-        sd_journal _cleanup_journal_close_ *j = NULL;
+        _cleanup_journal_close_ sd_journal*j = NULL;
         int r;
         int jflags = SD_JOURNAL_LOCAL_ONLY | system * SD_JOURNAL_SYSTEM_ONLY;
 
@@ -957,6 +984,10 @@ int show_journal_by_unit(
         if (r < 0)
                 return r;
 
+        r = add_match_this_boot(j);
+        if (r < 0)
+                return r;
+
         if (system)
                 r = add_matches_for_unit(j, unit);
         else
@@ -964,6 +995,8 @@ int show_journal_by_unit(
         if (r < 0)
                 return r;
 
+        log_debug("Journal filter: %s", journal_make_match_string(j));
+
         r = show_journal(f, j, mode, n_columns, not_before, how_many, flags);
         if (r < 0)
                 return r;