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)