diff --git a/Knot.files b/Knot.files
index da95d12b2f96d60ff4497720b78848692b7a7092..d283f3219aa7ffc89a0cb2f0fc2ba8bf160cb788 100644
--- a/Knot.files
+++ b/Knot.files
@@ -119,6 +119,8 @@ src/common/fdset_epoll.h
 src/common/fdset_epoll.c
 src/common/fdset_kqueue.h
 src/common/fdset_kqueue.c
+src/common/log.c
+src/common/log.h
 src/zcompile/parser-descriptor.h
 src/zcompile/parser-descriptor.c
 src/zcompile/parser-util.h
@@ -135,8 +137,6 @@ src/knot/ctl/knotc_main.c
 src/knot/ctl/process.c
 src/knot/ctl/process.h
 src/knot/other/debug.h
-src/knot/other/log.c
-src/knot/other/log.h
 src/knot/other/error.c
 src/knot/other/error.h
 src/knot/stat/gatherer.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 7f39547404f41bdda0d02079f185d0b1e99b0356..a1bb196ade5b4cdcce5e59aa90fe87c4a400db96 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -265,7 +265,9 @@ libknots_la_SOURCES =				\
         common/fdset_kqueue.h			\
         common/fdset_kqueue.c			\
         common/fdset_epoll.h			\
-        common/fdset_epoll.c			
+        common/fdset_epoll.c			\
+	common/log.c				\
+	common/log.h			
 
 libknotd_la_SOURCES =				\
 	knot/stat/gatherer.c				\
@@ -273,8 +275,6 @@ libknotd_la_SOURCES =				\
 	knot/stat/gatherer.h				\
 	knot/stat/stat.h				\
 	knot/common.h				\
-	knot/other/log.c			\
-	knot/other/log.h			\
 	knot/other/debug.h			\
 	knot/other/error.h			\
 	knot/other/error.c			\
diff --git a/src/knot/other/log.c b/src/common/log.c
similarity index 99%
rename from src/knot/other/log.c
rename to src/common/log.c
index 488763dfafa184c6986ea31061a901e14a657143..921882fe4f9cad4c1a4a37aa91ddd7b12b4f48cd 100644
--- a/src/knot/other/log.c
+++ b/src/common/log.c
@@ -20,10 +20,10 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "common/log.h"
+#include "common/lists.h"
 #include "knot/common.h"
 #include "knot/other/error.h"
-#include "knot/other/log.h"
-#include "common/lists.h"
 #include "knot/conf/conf.h"
 
 /*! Log source table. */
diff --git a/src/knot/other/log.h b/src/common/log.h
similarity index 100%
rename from src/knot/other/log.h
rename to src/common/log.h
diff --git a/src/knot/common.h b/src/knot/common.h
index 027962ab6ff26d3a38307f630a429a44c2641489..c321b94651beb50bf9008f9bb3d5a5d0e8882a44 100644
--- a/src/knot/common.h
+++ b/src/knot/common.h
@@ -79,7 +79,7 @@ typedef unsigned int uint; /*!< \brief Unsigned. */
 
 #include "common/latency.h"
 #include "common/print.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "knot/other/debug.h"
 
 /*! \brief Eliminate compiler warning with unused parameters. */
diff --git a/src/knot/conf/cf-lex.l b/src/knot/conf/cf-lex.l
index 6683edccfccaca45192b8b73d61aad2b96a564da..ed8058b88c4d3e4710e130f31b42801613f26550 100644
--- a/src/knot/conf/cf-lex.l
+++ b/src/knot/conf/cf-lex.l
@@ -15,7 +15,7 @@
 
 #include "common/sockaddr.h"
 #include "knot/conf/conf.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "libknotd_la-cf-parse.h" /* Automake generated header. */
 
 /* Imported symbols. */
diff --git a/src/knot/conf/conf.h b/src/knot/conf/conf.h
index 1e6644e193c11b3185ec65056b64599b61193eca..437dda61bf9ed164835835ee0fd681ab56394342 100644
--- a/src/knot/conf/conf.h
+++ b/src/knot/conf/conf.h
@@ -37,7 +37,7 @@
 #include "libknot/util/descriptor.h"
 #include "libknot/tsig.h"
 #include "common/lists.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 
 /* Constants. */
 #define CONFIG_DEFAULT_PORT 53
diff --git a/src/knot/conf/logconf.c b/src/knot/conf/logconf.c
index a57afd9ab97631786cdbd321f1c78df7f53a93d6..4d7334fa0d8f78b95690727516a2fd00ace6ffea 100644
--- a/src/knot/conf/logconf.c
+++ b/src/knot/conf/logconf.c
@@ -23,7 +23,7 @@
 #include "knot/other/debug.h"
 #include "knot/conf/logconf.h"
 #include "knot/conf/conf.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "knot/other/error.h"
 #include "common/lists.h"
 #include "knot/common.h"
diff --git a/src/knot/other/debug.h b/src/knot/other/debug.h
index 7768d22a9930d62f8f514e9a202dc110c0004952..3a3e98bf9316c3b10c9d5707d7480a54e35cc712 100644
--- a/src/knot/other/debug.h
+++ b/src/knot/other/debug.h
@@ -49,7 +49,7 @@
   #define KNOTD_ZLOAD_DEBUG
 #endif
 
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "common/print.h"
 
 /******************************************************************************/
diff --git a/src/knot/server/dthreads.c b/src/knot/server/dthreads.c
index be6fc246a8fc36ab9d262dfc5ca0b71d2bd273eb..bfb40a17f59555bc8de4f7837702d0b1610ca455 100644
--- a/src/knot/server/dthreads.c
+++ b/src/knot/server/dthreads.c
@@ -27,7 +27,7 @@
 
 #include "knot/common.h"
 #include "knot/server/dthreads.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "knot/other/error.h"
 
 /*! \brief Lock thread state for R/W. */
diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c
index 8041598f673b86565c0854068115f68d09e4bb5a..9ce1c80235a9560eac326b927e8636523dfaec4f 100644
--- a/src/knot/server/zones.c
+++ b/src/knot/server/zones.c
@@ -28,7 +28,7 @@
 #include "knot/conf/conf.h"
 #include "knot/other/debug.h"
 #include "knot/other/error.h"
-#include "knot/other/log.h"
+#include "common/log.h"
 #include "knot/server/notify.h"
 #include "knot/server/server.h"
 #include "libknot/updates/xfr-in.h"
diff --git a/src/libknot/util/debug.h b/src/libknot/util/debug.h
index e02f9888e58c40c0e991f199378a9c04e2915e7f..b6aba6ebcf741bf069406d74b93798636bb23319 100644
--- a/src/libknot/util/debug.h
+++ b/src/libknot/util/debug.h
@@ -33,6 +33,7 @@
 #include <stdio.h>
 
 #include "config.h" /* autoconf generated */
+#include "common/log.h"
 
 /*
  * Debug macros
@@ -132,8 +133,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_ns(msg...) fprintf(stderr, msg)
-#define dbg_ns_hex(data, len)  hex_print((data), (len))
+#define dbg_ns(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ns_hex(data, len)  hex_log(LOG_SERVER, (data), (len))
 #define dbg_ns_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_ns(msg...)
@@ -143,8 +144,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_ns_verb(msg...) fprintf(stderr, msg)
-#define dbg_ns_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_ns_verb(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ns_hex_verb(data, len) hex_log(LOG_SERVER, (data), (len))
 #define dbg_ns_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_ns_verb(msg...)
@@ -154,8 +155,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_ns_detail(msg...) fprintf(stderr, msg)
-#define dbg_ns_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_ns_detail(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ns_hex_detail(data, len)  hex_log(LOG_SERVER, (data), (len))
 #define dbg_ns_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_ns_detail(msg...)
@@ -182,8 +183,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_dname(msg...) fprintf(stderr, msg)
-#define dbg_dname_hex(data, len)  hex_print((data), (len))
+#define dbg_dname(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_dname_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_dname_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_dname(msg...)
@@ -193,8 +194,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_dname_verb(msg...) fprintf(stderr, msg)
-#define dbg_dname_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_dname_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_dname_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_dname_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_dname_verb(msg...)
@@ -204,8 +205,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_dname_detail(msg...) fprintf(stderr, msg)
-#define dbg_dname_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_dname_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_dname_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_dname_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_dname_detail(msg...)
@@ -232,8 +233,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_node(msg...) fprintf(stderr, msg)
-#define dbg_node_hex(data, len)  hex_print((data), (len))
+#define dbg_node(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_node_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_node(msg...)
 #define dbg_node_hex(data, len)
@@ -241,8 +242,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_node_verb(msg...) fprintf(stderr, msg)
-#define dbg_node_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_node_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_node_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_node_verb(msg...)
 #define dbg_node_hex_verb(data, len)
@@ -250,8 +251,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_node_detail(msg...) fprintf(stderr, msg)
-#define dbg_node_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_node_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_node_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_node_detail(msg...)
 #define dbg_node_hex_detail(data, len)
@@ -273,8 +274,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_zone(msg...) fprintf(stderr, msg)
-#define dbg_zone_hex(data, len)  hex_print((data), (len))
+#define dbg_zone(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zone_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zone_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_zone(msg...)
@@ -284,8 +285,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_zone_verb(msg...) fprintf(stderr, msg)
-#define dbg_zone_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_zone_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zone_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zone_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_zone_verb(msg...)
@@ -295,8 +296,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_zone_detail(msg...) fprintf(stderr, msg)
-#define dbg_zone_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_zone_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zone_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zone_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_zone_detail(msg...)
@@ -323,8 +324,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_zonedb(msg...) fprintf(stderr, msg)
-#define dbg_zonedb_hex(data, len)  hex_print((data), (len))
+#define dbg_zonedb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zonedb_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zonedb_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_zonedb(msg...)
@@ -334,8 +335,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_zonedb_verb(msg...) fprintf(stderr, msg)
-#define dbg_zonedb_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_zonedb_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zonedb_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zonedb_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_zonedb_verb(msg...)
@@ -345,8 +346,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_zonedb_detail(msg...) fprintf(stderr, msg)
-#define dbg_zonedb_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_zonedb_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_zonedb_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_zonedb_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_zonedb_detail(msg...)
@@ -373,8 +374,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_response(msg...) fprintf(stderr, msg)
-#define dbg_response_hex(data, len)  hex_print((data), (len))
+#define dbg_response(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_response_hex(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_response_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_response(msg...)
@@ -384,8 +385,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_response_verb(msg...) fprintf(stderr, msg)
-#define dbg_response_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_response_verb(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_response_hex_verb(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_response_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_response_verb(msg...)
@@ -395,8 +396,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_response_detail(msg...) fprintf(stderr, msg)
-#define dbg_response_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_response_detail(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_response_hex_detail(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_response_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_response_detail(msg...)
@@ -423,8 +424,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_packet(msg...) fprintf(stderr, msg)
-#define dbg_packet_hex(data, len)  hex_print((data), (len))
+#define dbg_packet(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_packet_hex(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_packet_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_packet(msg...)
@@ -434,8 +435,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_packet_verb(msg...) fprintf(stderr, msg)
-#define dbg_packet_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_packet_verb(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_packet_hex_verb(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_packet_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_packet_verb(msg...)
@@ -445,8 +446,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_packet_detail(msg...) fprintf(stderr, msg)
-#define dbg_packet_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_packet_detail(msg...) log_msg(LOG_ANSWER, LOG_DEBUG, msg)
+#define dbg_packet_hex_detail(data, len)  hex_log(LOG_ANSWER, (data), (len))
 #define dbg_packet_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_packet_detail(msg...)
@@ -473,8 +474,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_edns(msg...) fprintf(stderr, msg)
-#define dbg_edns_hex(data, len)  hex_print((data), (len))
+#define dbg_edns(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_edns_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_edns(msg...)
 #define dbg_edns_hex(data, len)
@@ -482,8 +483,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_edns_verb(msg...) fprintf(stderr, msg)
-#define dbg_edns_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_edns_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_edns_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_edns_verb(msg...)
 #define dbg_edns_hex_verb(data, len)
@@ -491,8 +492,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_edns_detail(msg...) fprintf(stderr, msg)
-#define dbg_edns_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_edns_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_edns_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_edns_detail(msg...)
 #define dbg_edns_hex_detail(data, len)
@@ -514,8 +515,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_nsec3(msg...) fprintf(stderr, msg)
-#define dbg_nsec3_hex(data, len)  hex_print((data), (len))
+#define dbg_nsec3(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_nsec3_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_nsec3(msg...)
 #define dbg_nsec3_hex(data, len)
@@ -523,8 +524,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_nsec3_verb(msg...) fprintf(stderr, msg)
-#define dbg_nsec3_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_nsec3_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_nsec3_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_nsec3_verb(msg...)
 #define dbg_nsec3_hex_verb(data, len)
@@ -532,8 +533,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_nsec3_detail(msg...) fprintf(stderr, msg)
-#define dbg_nsec3_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_nsec3_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_nsec3_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_nsec3_detail(msg...)
 #define dbg_nsec3_hex_detail(data, len)
@@ -555,8 +556,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_ck(msg...) fprintf(stderr, msg)
-#define dbg_ck_hex(data, len)  hex_print((data), (len))
+#define dbg_ck(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hex(data, len)  hex_log(LOG_SERVER, (data), (len))
 #define dbg_ck_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_ck(msg...)
@@ -566,8 +567,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_ck_verb(msg...) fprintf(stderr, msg)
-#define dbg_ck_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_ck_verb(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hex_verb(data, len)  hex_log(LOG_SERVER, (data), (len))
 #define dbg_ck_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_ck_verb(msg...)
@@ -577,8 +578,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_ck_detail(msg...) fprintf(stderr, msg)
-#define dbg_ck_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_ck_detail(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hex_detail(data, len)  hex_log(LOG_SERVER, (data), (len))
 #define dbg_ck_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_ck_detail(msg...)
@@ -605,9 +606,9 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_ck_hash(msg...) fprintf(stderr, msg)
-#define dbg_ck_rehash(msg...) fprintf(stderr, msg)
-#define dbg_ck_hash_hex(data, len)  hex_print((data), (len))
+#define dbg_ck_hash(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_rehash(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hash_hex(data, len)  hex_log(LOG_SERVER, (data), (len))
 #else
 #define dbg_ck_hash(msg...)
 #define dbg_ck_rehash(msg...)
@@ -616,8 +617,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_ck_hash_verb(msg...) fprintf(stderr, msg)
-#define dbg_ck_hash_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_ck_hash_verb(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hash_hex_verb(data, len)  hex_log(LOG_SERVER, (data), (len))
 #else
 #define dbg_ck_hash_verb(msg...)
 #define dbg_ck_hash_hex_verb(data, len)
@@ -625,8 +626,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_ck_hash_detail(msg...) fprintf(stderr, msg)
-#define dbg_ck_hash_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_ck_hash_detail(msg...) log_msg(LOG_SERVER, LOG_DEBUG, msg)
+#define dbg_ck_hash_hex_detail(data, len)  hex_log(LOG_SERVER, (data), (len))
 #else
 #define dbg_ck_hash_detail(msg...)
 #define dbg_ck_hash_hex_detail(data, len)
@@ -649,8 +650,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_xfrin(msg...) fprintf(stderr, msg)
-#define dbg_xfrin_hex(data, len)  hex_print((data), (len))
+#define dbg_xfrin(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_xfrin_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_xfrin_exec(cmds) do { cmds } while (0)
 #else
 #define dbg_xfrin(msg...)
@@ -660,8 +661,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_xfrin_verb(msg...) fprintf(stderr, msg)
-#define dbg_xfrin_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_xfrin_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_xfrin_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_xfrin_exec_verb(cmds) do { cmds } while (0)
 #else
 #define dbg_xfrin_verb(msg...)
@@ -671,8 +672,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_xfrin_detail(msg...) fprintf(stderr, msg)
-#define dbg_xfrin_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_xfrin_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_xfrin_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #define dbg_xfrin_exec_detail(cmds) do { cmds } while (0)
 #else
 #define dbg_xfrin_detail(msg...)
@@ -699,8 +700,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_ddns(msg...) fprintf(stderr, msg)
-#define dbg_ddns_hex(data, len)  hex_print((data), (len))
+#define dbg_ddns(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_ddns_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_ddns(msg...)
 #define dbg_ddns_hex(data, len)
@@ -708,8 +709,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_ddns_verb(msg...) fprintf(stderr, msg)
-#define dbg_ddns_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_ddns_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_ddns_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_ddns_verb(msg...)
 #define dbg_ddns_hex_verb(data, len)
@@ -717,8 +718,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_ddns_detail(msg...) fprintf(stderr, msg)
-#define dbg_ddns_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_ddns_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_ddns_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_ddns_detail(msg...)
 #define dbg_ddns_hex_detail(data, len)
@@ -738,8 +739,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_tsig(msg...) fprintf(stderr, msg)
-#define dbg_tsig_hex(data, len)  hex_print((const char*)(data), (len))
+#define dbg_tsig(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_tsig_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_tsig(msg...)
 #define dbg_tsig_hex(data, len)
@@ -747,8 +748,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_tsig_verb(msg...) fprintf(stderr, msg)
-#define dbg_tsig_hex_verb(data, len)  hex_print((const char*)(data), (len))
+#define dbg_tsig_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_tsig_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_tsig_verb(msg...)
 #define dbg_tsig_hex_verb(data, len)
@@ -756,8 +757,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_tsig_detail(msg...) fprintf(stderr, msg)
-#define dbg_tsig_hex_detail(data, len)  hex_print((const char*)(data), (len))
+#define dbg_tsig_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_tsig_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_tsig_detail(msg...)
 #define dbg_tsig_hex_detail(data, len)
@@ -777,8 +778,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Brief messages. */
 #ifdef DEBUG_ENABLE_BRIEF
-#define dbg_rrset(msg...) fprintf(stderr, msg)
-#define dbg_rrset_hex(data, len)  hex_print((data), (len))
+#define dbg_rrset(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_rrset_hex(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_rrset(msg...)
 #define dbg_rrset_hex(data, len)
@@ -786,8 +787,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Verbose messages. */
 #ifdef DEBUG_ENABLE_VERBOSE
-#define dbg_rrset_verb(msg...) fprintf(stderr, msg)
-#define dbg_rrset_hex_verb(data, len)  hex_print((data), (len))
+#define dbg_rrset_verb(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_rrset_hex_verb(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_rrset_verb(msg...)
 #define dbg_rrset_hex_verb(data, len)
@@ -795,8 +796,8 @@ void knot_zone_contents_dump(knot_zone_contents_t *zone, char loaded_zone);
 
 /* Detail messages. */
 #ifdef DEBUG_ENABLE_DETAILS
-#define dbg_rrset_detail(msg...) fprintf(stderr, msg)
-#define dbg_rrset_hex_detail(data, len)  hex_print((data), (len))
+#define dbg_rrset_detail(msg...) log_msg(LOG_ZONE, LOG_DEBUG, msg)
+#define dbg_rrset_hex_detail(data, len)  hex_log(LOG_ZONE, (data), (len))
 #else
 #define dbg_rrset_detail(msg...)
 #define dbg_rrset_hex_detail(data, len)