diff --git a/Makefile b/Makefile
index 1271200..a988058 100755
--- a/Makefile
+++ b/Makefile
@@ -35,6 +35,7 @@ OBJ += hash.o
 OBJ += icmp_helper.o
 OBJ += interface.o
 OBJ += loglevel.o
+OBJ += log.o
 OBJ += main.o
 OBJ += netlink.o
 OBJ += ping.o
diff --git a/debug.c b/debug.c
index 185e26d..9bc4d0c 100644
--- a/debug.c
+++ b/debug.c
@@ -268,44 +268,3 @@ int debug_print_routing_algos(void)
 	debugfs_make_path(DEBUG_BATIF_PATH_FMT, "", full_path, sizeof(full_path));
 	return read_file(full_path, DEBUG_ROUTING_ALGOS, 0, 0, 0, 0);
 }
-
-static void log_usage(void)
-{
-	fprintf(stderr, "Usage: batctl [options] log [parameters]\n");
-	fprintf(stderr, "parameters:\n");
-	fprintf(stderr, " \t -h print this help\n");
-	fprintf(stderr, " \t -n don't replace mac addresses with bat-host names\n");
-}
-
-int log_print(char *mesh_iface, int argc, char **argv)
-{
-	int optchar, res, read_opt = USE_BAT_HOSTS | LOG_MODE;
-	char full_path[MAX_PATH+1];
-	char *debugfs_mnt;
-
-	while ((optchar = getopt(argc, argv, "hn")) != -1) {
-		switch (optchar) {
-		case 'h':
-			log_usage();
-			return EXIT_SUCCESS;
-		case 'n':
-			read_opt &= ~USE_BAT_HOSTS;
-			break;
-		default:
-			log_usage();
-			return EXIT_FAILURE;
-		}
-	}
-
-	check_root_or_die("batctl log");
-
-	debugfs_mnt = debugfs_mount(NULL);
-	if (!debugfs_mnt) {
-		fprintf(stderr, "Error - can't mount or find debugfs\n");
-		return EXIT_FAILURE;
-	}
-
-	debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path, sizeof(full_path));
-	res = read_file(full_path, DEBUG_LOG, read_opt, 0, 0, 0);
-	return res;
-}
diff --git a/debug.h b/debug.h
index 5508eaf..d9a2e3a 100644
--- a/debug.h
+++ b/debug.h
@@ -57,7 +57,6 @@ struct debug_table_data {
 extern const struct debug_table_data batctl_debug_tables[BATCTL_TABLE_NUM];
 
 int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv);
-int log_print(char *mesh_iface, int argc, char **argv);
 int debug_print_routing_algos(void);
 
 #endif
diff --git a/log.c b/log.c
new file mode 100644
index 0000000..fc31c66
--- /dev/null
+++ b/log.c
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2009-2018  B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner <mareklindner@neomailbox.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * License-Filename: LICENSES/preferred/GPL-2.0
+ */
+
+#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "debug.h"
+#include "debugfs.h"
+#include "functions.h"
+
+static void log_usage(void)
+{
+	fprintf(stderr, "Usage: batctl [options] log [parameters]\n");
+	fprintf(stderr, "parameters:\n");
+	fprintf(stderr, " \t -h print this help\n");
+	fprintf(stderr, " \t -n don't replace mac addresses with bat-host names\n");
+}
+
+int log_print(char *mesh_iface, int argc, char **argv)
+{
+	int optchar, res, read_opt = USE_BAT_HOSTS | LOG_MODE;
+	char full_path[MAX_PATH+1];
+	char *debugfs_mnt;
+
+	while ((optchar = getopt(argc, argv, "hn")) != -1) {
+		switch (optchar) {
+		case 'h':
+			log_usage();
+			return EXIT_SUCCESS;
+		case 'n':
+			read_opt &= ~USE_BAT_HOSTS;
+			break;
+		default:
+			log_usage();
+			return EXIT_FAILURE;
+		}
+	}
+
+	check_root_or_die("batctl log");
+
+	debugfs_mnt = debugfs_mount(NULL);
+	if (!debugfs_mnt) {
+		fprintf(stderr, "Error - can't mount or find debugfs\n");
+		return EXIT_FAILURE;
+	}
+
+	debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path, sizeof(full_path));
+	res = read_file(full_path, DEBUG_LOG, read_opt, 0, 0, 0);
+	return res;
+}
diff --git a/log.h b/log.h
new file mode 100644
index 0000000..4ba00e3
--- /dev/null
+++ b/log.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (C) 2009-2018  B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner <mareklindner@neomailbox.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * License-Filename: LICENSES/preferred/GPL-2.0
+ */
+
+#ifndef _BATCTL_LOG_H
+#define _BATCTL_LOG_H
+
+int log_print(char *mesh_iface, int argc, char **argv);
+
+#endif
diff --git a/main.c b/main.c
index ac4bc47..5b3e570 100644
--- a/main.c
+++ b/main.c
@@ -39,6 +39,7 @@
 #include "bisect_iv.h"
 #include "statistics.h"
 #include "loglevel.h"
+#include "log.h"
 #include "functions.h"
 
 char mesh_dfl_iface[] = "bat0";
