Merge pull request #33884 from DaanDeMeyer/log-context
log: Fix size calculation for number of iovecs
This commit is contained in:
+7
-4
@@ -396,9 +396,10 @@ void log_forget_fds(void) {
|
||||
console_fd_is_tty = -1;
|
||||
}
|
||||
|
||||
void log_set_max_level(int level) {
|
||||
int log_set_max_level(int level) {
|
||||
assert(level == LOG_NULL || LOG_PRI(level) == level);
|
||||
|
||||
int old = log_max_level;
|
||||
log_max_level = level;
|
||||
|
||||
/* Also propagate max log level to libc's syslog(), just in case some other component loaded into our
|
||||
@@ -411,6 +412,8 @@ void log_set_max_level(int level) {
|
||||
|
||||
/* Ensure that our own LOG_NULL define maps sanely to the log mask */
|
||||
assert_cc(LOG_UPTO(LOG_NULL) == 0);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
void log_set_facility(int facility) {
|
||||
@@ -744,7 +747,7 @@ static int write_to_journal(
|
||||
if (LOG_PRI(level) > log_target_max_level[LOG_TARGET_JOURNAL])
|
||||
return 0;
|
||||
|
||||
iovec_len = MIN(6 + _log_context_num_fields * 2, IOVEC_MAX);
|
||||
iovec_len = MIN(6 + _log_context_num_fields * 3, IOVEC_MAX);
|
||||
iovec = newa(struct iovec, iovec_len);
|
||||
|
||||
log_do_header(header, sizeof(header), level, error, file, line, func, object_field, object, extra_field, extra);
|
||||
@@ -1096,7 +1099,7 @@ int log_struct_internal(
|
||||
int r;
|
||||
bool fallback = false;
|
||||
|
||||
iovec_len = MIN(17 + _log_context_num_fields * 2, IOVEC_MAX);
|
||||
iovec_len = MIN(17 + _log_context_num_fields * 3, IOVEC_MAX);
|
||||
iovec = newa(struct iovec, iovec_len);
|
||||
|
||||
/* If the journal is available do structured logging.
|
||||
@@ -1193,7 +1196,7 @@ int log_struct_iovec_internal(
|
||||
struct iovec *iovec;
|
||||
size_t n = 0, iovec_len;
|
||||
|
||||
iovec_len = MIN(1 + n_input_iovec * 2 + _log_context_num_fields * 2, IOVEC_MAX);
|
||||
iovec_len = MIN(1 + n_input_iovec * 2 + _log_context_num_fields * 3, IOVEC_MAX);
|
||||
iovec = newa(struct iovec, iovec_len);
|
||||
|
||||
log_do_header(header, sizeof(header), level, error, file, line, func, NULL, NULL, NULL, NULL);
|
||||
|
||||
+10
-1
@@ -56,7 +56,7 @@ int log_set_target_from_string(const char *e);
|
||||
LogTarget log_get_target(void) _pure_;
|
||||
void log_settle_target(void);
|
||||
|
||||
void log_set_max_level(int level);
|
||||
int log_set_max_level(int level);
|
||||
int log_set_max_level_from_string(const char *e);
|
||||
int log_get_max_level(void) _pure_;
|
||||
int log_max_levels_to_string(int level, char **ret);
|
||||
@@ -491,6 +491,15 @@ size_t log_context_num_contexts(void);
|
||||
/* Returns the number of fields in all attached log contexts. */
|
||||
size_t log_context_num_fields(void);
|
||||
|
||||
static inline void _reset_log_level(int *saved_log_level) {
|
||||
assert(saved_log_level);
|
||||
|
||||
log_set_max_level(*saved_log_level);
|
||||
}
|
||||
|
||||
#define LOG_CONTEXT_SET_LOG_LEVEL(level) \
|
||||
_cleanup_(_reset_log_level) _unused_ int _saved_log_level_ = log_set_max_level(level);
|
||||
|
||||
#define LOG_CONTEXT_PUSH(...) \
|
||||
LOG_CONTEXT_PUSH_STRV(STRV_MAKE(__VA_ARGS__))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user