diff --git a/daemon/main.c b/daemon/main.c index cfff0d0cb52dc5e8325d7fdc7738a9c9bc52b7b0..be70ac8999a244174274c44a9521f3ec3f5a6a53 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -269,7 +269,7 @@ static int parse_args(int argc, char **argv, struct args *args) args->quiet = true; break; case 'V': - kr_log_info("%s, version %s\n", "Knot Resolver", PACKAGE_VERSION); + kr_log_info(LOG_GRP_SYSTEM, "%s, version %s\n", "Knot Resolver", PACKAGE_VERSION); return EXIT_SUCCESS; case 'h': case '?': diff --git a/lib/log.c b/lib/log.c index 29d903b31290c46e15bf9fbf1445902bb24d0f52..72ce0294083bb9f92b3a6073bd8f317189dfd9ef 100644 --- a/lib/log.c +++ b/lib/log.c @@ -39,10 +39,14 @@ int group_is_set(log_groups_t group) return kr_log_groups & (group); } -void kr_log_fmt(log_groups_t group, log_level_t level, const char *fmt, ...) +void kr_log_fmt(log_groups_t group, log_level_t level, const char *file, + const char *line, const char *func, const char *fmt, ...) { va_list args; + if (!(KR_LOG_LEVEL_IS(level) || group_is_set(group))) + return; + if (kr_log_target == LOG_TARGET_SYSLOG) { if (group_is_set(group)) setlogmask(LOG_UPTO(LOG_DEBUG)); @@ -50,15 +54,7 @@ void kr_log_fmt(log_groups_t group, log_level_t level, const char *fmt, ...) va_start(args, fmt); #if ENABLE_LIBSYSTEMD if (use_journal) { - char *code_line = NULL; - if (asprintf(&code_line, "%d", __LINE__) == -1) { - sd_journal_printv(level, fmt, args); - } else { - sd_journal_printv_with_location(level, - __FILE__, code_line, __func__, - fmt, args); - free(code_line); - } + sd_journal_printv_with_location(level, file, line, func, fmt, args); } else { vsyslog(level, fmt, args); } @@ -70,8 +66,6 @@ void kr_log_fmt(log_groups_t group, log_level_t level, const char *fmt, ...) if (group_is_set(group)) setlogmask(LOG_UPTO(kr_log_level)); } else { - if (!(KR_LOG_LEVEL_IS(level) || group_is_set(group))) - return; FILE *stream; switch(kr_log_target) { @@ -123,7 +117,7 @@ int kr_log_level_set(log_level_t level) /* gnutls logs messages related to our TLS and also libdnssec, * and the logging is set up in a global way only */ - if (KR_LOG_LEVEL_IS(LOG_DEBUG)) { + if (KR_LOG_LEVEL_IS(LOG_DEBUG) || group_is_set(LOG_GRP_TLS) || group_is_set(LOG_GRP_TLSCLIENT)) { gnutls_global_set_log_function(kres_gnutls_log); } diff --git a/lib/log.h b/lib/log.h index 4f624b580a3016c2c85b3e6255166d3500d9ae82..b5f76df56b5e986e442a052e92a95c8152ad0627 100644 --- a/lib/log.h +++ b/lib/log.h @@ -53,8 +53,9 @@ KR_EXPORT extern log_level_t kr_log_level; KR_EXPORT extern log_target_t kr_log_target; -KR_EXPORT KR_PRINTF(3) -void kr_log_fmt(log_groups_t group, log_level_t level, const char *fmt, ...); +KR_EXPORT KR_PRINTF(6) +void kr_log_fmt(log_groups_t group, log_level_t level, const char *file, const char *line, + const char *func, const char *fmt, ...); KR_EXPORT int kr_log_level_set(log_level_t level); KR_EXPORT @@ -62,14 +63,25 @@ log_level_t kr_log_level_get(void); KR_EXPORT void kr_log_init(log_level_t level, log_target_t target); -#define kr_log_debug(grp, fmt, ...) kr_log_fmt(grp, LOG_DEBUG, fmt, ## __VA_ARGS__) -#define kr_log_info(grp, fmt, ...) kr_log_fmt(grp, LOG_INFO, fmt, ## __VA_ARGS__) -#define kr_log_notice(grp, fmt, ...) kr_log_fmt(grp, LOG_NOTICE, fmt, ## __VA_ARGS__) -#define kr_log_warning(grp, fmt, ...) kr_log_fmt(grp, LOG_WARNING, fmt, ## __VA_ARGS__) -#define kr_log_error(grp, fmt, ...) kr_log_fmt(grp, LOG_ERR, fmt, ## __VA_ARGS__) -#define kr_log_fatal(grp, fmt, ...) kr_log_fmt(grp, LOG_CRIT, fmt, ## __VA_ARGS__) - -#define kr_log_deprecate(grp, fmt, ...) kr_log_fmt(grp, LOG_WARNING, "deprecation WARNING: " fmt, ## __VA_ARGS__) +#define TO_STR_A(x) #x +#define TO_STR(x) TO_STR_A(x) +#define SD_JOURNAL_METADATA "CODE_FILE=" __FILE__, "CODE_LINE=" TO_STR(__LINE__), "" + +#define kr_log_debug(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_DEBUG, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) +#define kr_log_info(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_INFO, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) +#define kr_log_notice(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_NOTICE, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) +#define kr_log_warning(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_WARNING, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) +#define kr_log_error(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_ERR, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) +#define kr_log_fatal(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_CRIT, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__) + +#define kr_log_deprecate(grp, fmt, ...) \ + kr_log_fmt(grp, LOG_WARNING,SD_JOURNAL_METADATA, "deprecation WARNING: " fmt, ## __VA_ARGS__) #define KR_LOG_LEVEL_IS(exp) ((kr_log_level >= (exp)) ? true : false)