From: Daan De Meyer Date: Tue, 12 Oct 2021 10:00:00 +0000 (+0100) Subject: journal: Add log level argument to journal_file_rotate_suggested() X-Git-Tag: v250-rc1~474^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8e6e1f10d8a3f3a0bd7f484c73aadc87602de4d;p=thirdparty%2Fsystemd.git journal: Add log level argument to journal_file_rotate_suggested() When journald is rotating a file, we'd like to log the reason at LOG_INFO or higher instead of LOG_DEBUG. For journalctl --header, logging the reason at a level higher than LOG_DEBUG doesn't really make sense. To accomodate both use cases, make the log level used by journal_file_rotate_suggested() configurable. --- diff --git a/src/journal-remote/journal-remote-write.c b/src/journal-remote/journal-remote-write.c index ea7162318ed..c953a5e93e0 100644 --- a/src/journal-remote/journal-remote-write.c +++ b/src/journal-remote/journal-remote-write.c @@ -68,7 +68,7 @@ int writer_write(Writer *w, assert(iovw); assert(iovw->count > 0); - if (journal_file_rotate_suggested(w->journal, 0)) { + if (journal_file_rotate_suggested(w->journal, 0, LOG_DEBUG)) { log_info("%s: Journal header limits reached or header out-of-date, rotating", w->journal->path); r = do_rotate(&w->journal, compress, seal); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index c93499bbc61..b8ec409cf1b 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -819,7 +819,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, size_t n if (!f) return; - if (journal_file_rotate_suggested(f, s->max_file_usec)) { + if (journal_file_rotate_suggested(f, s->max_file_usec, LOG_DEBUG)) { log_debug("%s: Journal header limits reached or header out-of-date, rotating.", f->path); rotate = true; } diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index d5ceba2f8fb..c7186fdb377 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -3316,7 +3316,7 @@ void journal_file_print_header(JournalFile *f) { le64toh(f->header->arena_size), le64toh(f->header->data_hash_table_size) / sizeof(HashItem), le64toh(f->header->field_hash_table_size) / sizeof(HashItem), - yes_no(journal_file_rotate_suggested(f, 0)), + yes_no(journal_file_rotate_suggested(f, 0, LOG_DEBUG)), le64toh(f->header->head_entry_seqnum), le64toh(f->header->head_entry_seqnum), le64toh(f->header->tail_entry_seqnum), le64toh(f->header->tail_entry_seqnum), FORMAT_TIMESTAMP_SAFE(le64toh(f->header->head_entry_realtime)), le64toh(f->header->head_entry_realtime), @@ -4107,14 +4107,14 @@ int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot_id, u return 1; } -bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec) { +bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log_level) { assert(f); assert(f->header); /* If we gained new header fields we gained new features, * hence suggest a rotation */ if (le64toh(f->header->header_size) < sizeof(Header)) { - log_debug("%s uses an outdated header, suggesting rotation.", f->path); + log_full(log_level, "%s uses an outdated header, suggesting rotation.", f->path); return true; } @@ -4124,23 +4124,25 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec) { if (JOURNAL_HEADER_CONTAINS(f->header, n_data)) if (le64toh(f->header->n_data) * 4ULL > (le64toh(f->header->data_hash_table_size) / sizeof(HashItem)) * 3ULL) { - log_debug("Data hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items, %llu file size, %"PRIu64" bytes per hash table item), suggesting rotation.", - f->path, - 100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))), - le64toh(f->header->n_data), - le64toh(f->header->data_hash_table_size) / sizeof(HashItem), - (unsigned long long) f->last_stat.st_size, - f->last_stat.st_size / le64toh(f->header->n_data)); + log_full(log_level, + "Data hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items, %llu file size, %"PRIu64" bytes per hash table item), suggesting rotation.", + f->path, + 100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))), + le64toh(f->header->n_data), + le64toh(f->header->data_hash_table_size) / sizeof(HashItem), + (unsigned long long) f->last_stat.st_size, + f->last_stat.st_size / le64toh(f->header->n_data)); return true; } if (JOURNAL_HEADER_CONTAINS(f->header, n_fields)) if (le64toh(f->header->n_fields) * 4ULL > (le64toh(f->header->field_hash_table_size) / sizeof(HashItem)) * 3ULL) { - log_debug("Field hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items), suggesting rotation.", - f->path, - 100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))), - le64toh(f->header->n_fields), - le64toh(f->header->field_hash_table_size) / sizeof(HashItem)); + log_full(log_level, + "Field hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items), suggesting rotation.", + f->path, + 100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))), + le64toh(f->header->n_fields), + le64toh(f->header->field_hash_table_size) / sizeof(HashItem)); return true; } @@ -4148,15 +4150,17 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec) { * longest chain is longer than some threshold, let's suggest rotation. */ if (JOURNAL_HEADER_CONTAINS(f->header, data_hash_chain_depth) && le64toh(f->header->data_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) { - log_debug("Data hash table of %s has deepest hash chain of length %" PRIu64 ", suggesting rotation.", - f->path, le64toh(f->header->data_hash_chain_depth)); + log_full(log_level, + "Data hash table of %s has deepest hash chain of length %" PRIu64 ", suggesting rotation.", + f->path, le64toh(f->header->data_hash_chain_depth)); return true; } if (JOURNAL_HEADER_CONTAINS(f->header, field_hash_chain_depth) && le64toh(f->header->field_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) { - log_debug("Field hash table of %s has deepest hash chain of length at %" PRIu64 ", suggesting rotation.", - f->path, le64toh(f->header->field_hash_chain_depth)); + log_full(log_level, + "Field hash table of %s has deepest hash chain of length at %" PRIu64 ", suggesting rotation.", + f->path, le64toh(f->header->field_hash_chain_depth)); return true; } diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h index de3df7692d3..b4488259adb 100644 --- a/src/libsystemd/sd-journal/journal-file.h +++ b/src/libsystemd/sd-journal/journal-file.h @@ -259,7 +259,7 @@ void journal_default_metrics(JournalMetrics *m, int fd); int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to); int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to); -bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec); +bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log_level); int journal_file_map_data_hash_table(JournalFile *f); int journal_file_map_field_hash_table(JournalFile *f);