log: add an "error" parameter to all low-level logging calls and intrdouce log_error_errno() as log calls that take error numbers
This change has two benefits:
- The format string %m will now resolve to the specified error (or to
errno if the specified error is 0. This allows getting rid of a ton of
strerror() invocations, a function that is not thread-safe.
- The specified error can be passed to the journal in the ERRNO= field.
Now of course, we just need somebody to convert all cases of this:
log_error("Something happened: %s", strerror(-r));
into thus:
log_error_errno(-r, "Something happened: %m");
This commit is contained in:
@@ -38,10 +38,16 @@
|
||||
#include "exit-status.h"
|
||||
#include "sd-messages.h"
|
||||
|
||||
int log_syntax_internal(const char *unit, int level,
|
||||
const char *file, unsigned line, const char *func,
|
||||
const char *config_file, unsigned config_line,
|
||||
int error, const char *format, ...) {
|
||||
int log_syntax_internal(
|
||||
const char *unit,
|
||||
int level,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *config_file,
|
||||
unsigned config_line,
|
||||
int error,
|
||||
const char *format, ...) {
|
||||
|
||||
_cleanup_free_ char *msg = NULL;
|
||||
int r;
|
||||
@@ -55,21 +61,21 @@ int log_syntax_internal(const char *unit, int level,
|
||||
|
||||
if (unit)
|
||||
r = log_struct_internal(level,
|
||||
error > 0 ? error : EINVAL,
|
||||
file, line, func,
|
||||
getpid() == 1 ? "UNIT=%s" : "USER_UNIT=%s", unit,
|
||||
MESSAGE_ID(SD_MESSAGE_CONFIG_ERROR),
|
||||
"CONFIG_FILE=%s", config_file,
|
||||
"CONFIG_LINE=%u", config_line,
|
||||
"ERRNO=%d", error > 0 ? error : EINVAL,
|
||||
"MESSAGE=[%s:%u] %s", config_file, config_line, msg,
|
||||
NULL);
|
||||
else
|
||||
r = log_struct_internal(level,
|
||||
error > 0 ? error : EINVAL,
|
||||
file, line, func,
|
||||
MESSAGE_ID(SD_MESSAGE_CONFIG_ERROR),
|
||||
"CONFIG_FILE=%s", config_file,
|
||||
"CONFIG_LINE=%u", config_line,
|
||||
"ERRNO=%d", error > 0 ? error : EINVAL,
|
||||
"MESSAGE=[%s:%u] %s", config_file, config_line, msg,
|
||||
NULL);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user