Skip to content

Commit

Permalink
execute: Drop log level to unit log level in exec_spawn()
Browse files Browse the repository at this point in the history
All messages logged from exec_spawn() are attributed to the unit
and as such we should set the log level to the unit's max log level
for the duration of the function.

(cherry picked from commit 7881f485c9f57b1c7de4308eeab54458890c5c19)
(cherry picked from commit 4fd349953ea1d1ed580ecb94e5c0bf98c59d0fac)
  • Loading branch information
DaanDeMeyer authored and bluca committed Aug 16, 2024
1 parent c40900a commit af9add0
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/basic/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,9 +388,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 || (level & LOG_PRIMASK) == 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
Expand All @@ -403,6 +404,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) {
Expand Down
11 changes: 10 additions & 1 deletion src/basic/log.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,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_;

Expand Down Expand Up @@ -485,6 +485,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__))

Expand Down
1 change: 1 addition & 0 deletions src/core/execute.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ int exec_spawn(Unit *unit,
assert(!params->files_env); /* We fill this field, ensure it comes NULL-initialized to us */

LOG_CONTEXT_PUSH_UNIT(unit);
LOG_CONTEXT_SET_LOG_LEVEL(context->log_level_max >= 0 ? context->log_level_max : log_get_max_level());

r = exec_context_load_environment(unit, context, &params->files_env);
if (r < 0)
Expand Down

0 comments on commit af9add0

Please sign in to comment.