]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
log: fix journal metadata
authorLukáš Ježek <lukas.jezek@nic.cz>
Tue, 25 May 2021 14:15:44 +0000 (16:15 +0200)
committerLukáš Ježek <lukas.jezek@nic.cz>
Tue, 22 Jun 2021 12:39:43 +0000 (14:39 +0200)
daemon/main.c
lib/log.c
lib/log.h

index 23215d9ec9a7d2e4d1d034ada5bda1c115a4a53d..bdb75e7d7463947f8013f646d8a570acbf030d37 100644 (file)
@@ -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 '?':
index 90962e4fc6818a7b9028ec7213b98dcf24e279d0..114bc9b8b07b3495e81c74ca75c3479bfc2302dd 100644 (file)
--- 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
 #endif
                {
@@ -69,8 +65,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) {
@@ -122,7 +116,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);
        }
        gnutls_global_set_log_level(level);
index cc29a8b165bd6b90c3c212bc5b469786a52cea69..ddd1438342bffa1669f1130e79c9cff19c050291 100644 (file)
--- a/lib/log.h
+++ b/lib/log.h
@@ -51,8 +51,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
@@ -60,14 +61,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)