mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
basic/log: expose log_dispatch
This is useful when we want to avoid printf formatting on the message. It's nicer than using log_struct with "%s" as the format, because printf is slow and with a large message (like from a backtrace) this would require extra unnecessary memory. I'm not exposing all the fields in the wrapper: only level and errno. Those are the most likely to be useful.
This commit is contained in:
parent
ba360bb05c
commit
93484b4790
@ -553,7 +553,7 @@ static int write_to_journal(
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int log_dispatch(
|
||||
int log_dispatch_internal(
|
||||
int level,
|
||||
int error,
|
||||
const char *file,
|
||||
@ -653,7 +653,7 @@ int log_dump_internal(
|
||||
if (_likely_(LOG_PRI(level) > log_max_level))
|
||||
return -error;
|
||||
|
||||
return log_dispatch(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
}
|
||||
|
||||
int log_internalv(
|
||||
@ -680,7 +680,7 @@ int log_internalv(
|
||||
|
||||
vsnprintf(buffer, sizeof(buffer), format, ap);
|
||||
|
||||
return log_dispatch(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
}
|
||||
|
||||
int log_internal(
|
||||
@ -744,7 +744,8 @@ int log_object_internalv(
|
||||
|
||||
vsnprintf(b, l, format, ap);
|
||||
|
||||
return log_dispatch(level, error, file, line, func, object_field, object, extra_field, extra, buffer);
|
||||
return log_dispatch_internal(level, error, file, line, func,
|
||||
object_field, object, extra_field, extra, buffer);
|
||||
}
|
||||
|
||||
int log_object_internal(
|
||||
@ -788,7 +789,7 @@ static void log_assert(
|
||||
|
||||
log_abort_msg = buffer;
|
||||
|
||||
log_dispatch(level, 0, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
log_dispatch_internal(level, 0, file, line, func, NULL, NULL, NULL, NULL, buffer);
|
||||
}
|
||||
|
||||
noreturn void log_assert_failed(const char *text, const char *file, int line, const char *func) {
|
||||
@ -943,7 +944,7 @@ int log_struct_internal(
|
||||
if (!found)
|
||||
return -error;
|
||||
|
||||
return log_dispatch(level, error, file, line, func, NULL, NULL, NULL, NULL, buf + 8);
|
||||
return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buf + 8);
|
||||
}
|
||||
|
||||
int log_set_target_from_string(const char *e) {
|
||||
|
@ -75,6 +75,18 @@ void log_close_console(void);
|
||||
|
||||
void log_parse_environment(void);
|
||||
|
||||
int log_dispatch_internal(
|
||||
int level,
|
||||
int error,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *object_field,
|
||||
const char *object,
|
||||
const char *extra,
|
||||
const char *extra_field,
|
||||
char *buffer);
|
||||
|
||||
int log_internal(
|
||||
int level,
|
||||
int error,
|
||||
@ -167,6 +179,9 @@ void log_assert_failed_return(
|
||||
int line,
|
||||
const char *func);
|
||||
|
||||
#define log_dispatch(level, error, buffer) \
|
||||
log_dispatch_internal(level, error, __FILE__, __LINE__, __func__, NULL, NULL, NULL, NULL, buffer)
|
||||
|
||||
/* Logging with level */
|
||||
#define log_full_errno(level, error, ...) \
|
||||
({ \
|
||||
|
Loading…
Reference in New Issue
Block a user