execute: Get rid of custom logging macros
We already have LOG_CONTEXT_PUSH_EXEC() which with two additions does exactly the same as the custom logging macros, so let's get rid of the custom logging macros and use LOG_CONTEXT_PUSH_EXEC() instead.
This commit is contained in:
+260
-383
File diff suppressed because it is too large
Load Diff
+14
-61
@@ -14,6 +14,7 @@
|
||||
#include "exec-util.h"
|
||||
#include "fdset.h"
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
#include "log-context.h"
|
||||
#include "namespace.h"
|
||||
#include "nsflags.h"
|
||||
@@ -640,6 +641,16 @@ bool exec_is_cgroup_mount_read_only(const ExecContext *context);
|
||||
|
||||
const char* exec_get_private_notify_socket_path(const ExecContext *context, const ExecParameters *params, bool needs_sandboxing);
|
||||
|
||||
static inline int exec_log_level_max(const ExecContext *context, const ExecParameters *params) {
|
||||
assert(context);
|
||||
assert(params);
|
||||
|
||||
if (params->debug_invocation)
|
||||
return LOG_DEBUG;
|
||||
|
||||
return context->log_level_max < 0 ? log_get_max_level() : context->log_level_max;
|
||||
}
|
||||
|
||||
/* These logging macros do the same logging as those in unit.h, but using ExecContext and ExecParameters
|
||||
* instead of the unit object, so that it can be used in the sd-executor context (where the unit object is
|
||||
* not available). */
|
||||
@@ -649,77 +660,19 @@ const char* exec_get_private_notify_socket_path(const ExecContext *context, cons
|
||||
#define LOG_EXEC_INVOCATION_ID_FIELD(ep) \
|
||||
((ep)->runtime_scope == RUNTIME_SCOPE_USER ? "USER_INVOCATION_ID=" : "INVOCATION_ID=")
|
||||
|
||||
#define log_exec_full_errno_zerook(ec, ep, level, error, ...) \
|
||||
({ \
|
||||
const ExecContext *_c = (ec); \
|
||||
const ExecParameters *_p = (ep); \
|
||||
const int _l = (level); \
|
||||
bool _do_log = _p->debug_invocation || \
|
||||
_c->log_level_max < 0 || \
|
||||
_c->log_level_max >= LOG_PRI(_l); \
|
||||
LOG_CONTEXT_PUSH_IOV(_c->log_extra_fields, \
|
||||
_c->n_log_extra_fields); \
|
||||
!_do_log ? -ERRNO_VALUE(error) : \
|
||||
log_object_internal(_l, error, \
|
||||
PROJECT_FILE, __LINE__, __func__, \
|
||||
LOG_EXEC_ID_FIELD(_p), \
|
||||
_p->unit_id, \
|
||||
LOG_EXEC_INVOCATION_ID_FIELD(_p), \
|
||||
_p->invocation_id_string, \
|
||||
##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define log_exec_full_errno(ec, ep, level, error, ...) \
|
||||
({ \
|
||||
int _error = (error); \
|
||||
ASSERT_NON_ZERO(_error); \
|
||||
log_exec_full_errno_zerook(ec, ep, level, _error, ##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define log_exec_full(ec, ep, level, ...) (void) log_exec_full_errno_zerook(ec, ep, level, 0, __VA_ARGS__)
|
||||
|
||||
#define log_exec_debug(ec, ep, ...) log_exec_full(ec, ep, LOG_DEBUG, __VA_ARGS__)
|
||||
#define log_exec_info(ec, ep, ...) log_exec_full(ec, ep, LOG_INFO, __VA_ARGS__)
|
||||
#define log_exec_notice(ec, ep, ...) log_exec_full(ec, ep, LOG_NOTICE, __VA_ARGS__)
|
||||
#define log_exec_warning(ec, ep, ...) log_exec_full(ec, ep, LOG_WARNING, __VA_ARGS__)
|
||||
#define log_exec_error(ec, ep, ...) log_exec_full(ec, ep, LOG_ERR, __VA_ARGS__)
|
||||
|
||||
#define log_exec_debug_errno(ec, ep, error, ...) log_exec_full_errno(ec, ep, LOG_DEBUG, error, __VA_ARGS__)
|
||||
#define log_exec_info_errno(ec, ep, error, ...) log_exec_full_errno(ec, ep, LOG_INFO, error, __VA_ARGS__)
|
||||
#define log_exec_notice_errno(ec, ep, error, ...) log_exec_full_errno(ec, ep, LOG_NOTICE, error, __VA_ARGS__)
|
||||
#define log_exec_warning_errno(ec, ep, error, ...) log_exec_full_errno(ec, ep, LOG_WARNING, error, __VA_ARGS__)
|
||||
#define log_exec_error_errno(ec, ep, error, ...) log_exec_full_errno(ec, ep, LOG_ERR, error, __VA_ARGS__)
|
||||
|
||||
/* Like LOG_MESSAGE(), but with the unit name prefixed. */
|
||||
#define LOG_EXEC_MESSAGE(ep, fmt, ...) LOG_MESSAGE("%s: " fmt, (ep)->unit_id, ##__VA_ARGS__)
|
||||
#define LOG_EXEC_ID(ep) LOG_ITEM("%s%s", LOG_EXEC_ID_FIELD(ep), (ep)->unit_id)
|
||||
#define LOG_EXEC_INVOCATION_ID(ep) LOG_ITEM("%s%s", LOG_EXEC_INVOCATION_ID_FIELD(ep), (ep)->invocation_id_string)
|
||||
|
||||
#define log_exec_struct_errno(ec, ep, level, error, ...) \
|
||||
({ \
|
||||
const ExecContext *_c = (ec); \
|
||||
const ExecParameters *_p = (ep); \
|
||||
const int _l = (level); \
|
||||
bool _do_log = _p->debug_invocation || \
|
||||
_c->log_level_max < 0 || \
|
||||
_c->log_level_max >= LOG_PRI(_l); \
|
||||
LOG_CONTEXT_PUSH_IOV(_c->log_extra_fields, \
|
||||
_c->n_log_extra_fields); \
|
||||
!_do_log ? -ERRNO_VALUE(error) : \
|
||||
log_struct_errno(_l, error, \
|
||||
LOG_EXEC_ID(_p), \
|
||||
LOG_EXEC_INVOCATION_ID(_p), \
|
||||
__VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define log_exec_struct(ec, ep, level, ...) log_exec_struct_errno(ec, ep, level, 0, __VA_ARGS__)
|
||||
|
||||
#define _LOG_CONTEXT_PUSH_EXEC(ec, ep, p, c) \
|
||||
const ExecContext *c = (ec); \
|
||||
const ExecParameters *p = (ep); \
|
||||
LOG_CONTEXT_PUSH_KEY_VALUE(LOG_EXEC_ID_FIELD(p), p->unit_id); \
|
||||
LOG_CONTEXT_PUSH_KEY_VALUE(LOG_EXEC_INVOCATION_ID_FIELD(p), p->invocation_id_string); \
|
||||
LOG_CONTEXT_PUSH_IOV(c->log_extra_fields, c->n_log_extra_fields)
|
||||
LOG_CONTEXT_PUSH_IOV(c->log_extra_fields, c->n_log_extra_fields) \
|
||||
LOG_CONTEXT_SET_LOG_LEVEL(exec_log_level_max(c, p)) \
|
||||
LOG_SET_PREFIX(p->unit_id);
|
||||
|
||||
#define LOG_CONTEXT_PUSH_EXEC(ec, ep) \
|
||||
_LOG_CONTEXT_PUSH_EXEC(ec, ep, UNIQ_T(p, UNIQ), UNIQ_T(c, UNIQ))
|
||||
|
||||
+7
-5
@@ -240,6 +240,8 @@ static int run(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to deserialize: %m");
|
||||
|
||||
LOG_CONTEXT_PUSH_EXEC(&context, ¶ms);
|
||||
|
||||
arg_serialization = safe_fclose(arg_serialization);
|
||||
fdset = fdset_free(fdset);
|
||||
|
||||
@@ -253,11 +255,11 @@ static int run(int argc, char *argv[]) {
|
||||
const char *status = ASSERT_PTR(
|
||||
exit_status_to_string(exit_status, EXIT_STATUS_LIBC | EXIT_STATUS_SYSTEMD));
|
||||
|
||||
log_exec_struct_errno(&context, ¶ms, LOG_ERR, r,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED_STR),
|
||||
LOG_EXEC_MESSAGE(¶ms, "Failed at step %s spawning %s: %m",
|
||||
status, command.path),
|
||||
LOG_ITEM("EXECUTABLE=%s", command.path));
|
||||
log_struct_errno(LOG_ERR, r,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED_STR),
|
||||
LOG_EXEC_MESSAGE(¶ms, "Failed at step %s spawning %s: %m",
|
||||
status, command.path),
|
||||
LOG_ITEM("EXECUTABLE=%s", command.path));
|
||||
} else
|
||||
/* r == 0: 'skip' is chosen in the confirm spawn prompt
|
||||
* r > 0: expected/ignored failure, do not log at error level */
|
||||
|
||||
Reference in New Issue
Block a user