mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
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.
This commit is contained in:
parent
54ccd706ba
commit
c8e6e1f10d
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user