diff --git a/Makefile b/Makefile
index 888451f9643d1c559c9067b933cd5804074ec952..8dfaf00c21c81ef3853527dfe8e4623d5b3720e6 100644
--- a/Makefile
+++ b/Makefile
@@ -120,7 +120,8 @@ TOOLOBJ = $(SIMOBJ) \
 	  $(TARGET_DIR)/configreader.o $(TARGET_DIR)/attrs.o \
 	  $(TARGET_DIR)/keyboard.o $(TARGET_DIR)/box.o \
 	  $(TARGET_DIR)/pen.o $(TARGET_DIR)/libraryreader.o \
-	  $(TARGET_DIR)/display.o
+	  $(TARGET_DIR)/display.o \
+	  $(TARGET_DIR)/utils/logger.o \
 
 
 $(TARGET_DIR)/ana/%.o: $(SRC_DIR)/ana/%.c
diff --git a/include/log.h b/include/log.h
index 3edf08992cf582009b59228fc30d540213c5cc1e..4c4d1539c61a35d4ae7948aeaf356c6d4609fcec 100644
--- a/include/log.h
+++ b/include/log.h
@@ -15,7 +15,6 @@ void sortshints(short *x, short *y);
 long glowcol(log_nrec *n, long def);
 void resetmessages();
 void message(char *msg);
-void tracemessage(char *msg);
 void pass();
 void newattrs(log_gattrrec **gattr, short numattrs, log_kattrrec *kattr);
 void disposeattrs(log_gattrrec **gattr, short numattrs, log_kattrrec *kattr);
diff --git a/include/utils/logger.h b/include/utils/logger.h
new file mode 100644
index 0000000000000000000000000000000000000000..04241522bf59a1aa8cd51d0c8e767c0149c7ef48
--- /dev/null
+++ b/include/utils/logger.h
@@ -0,0 +1,10 @@
+#ifndef LOGGER_H
+#define LOGGER_H
+
+
+/**
+ * Write the message passed in parameter in the tracefile
+ */
+void tracemessage(char *msg);
+
+#endif
diff --git a/src/log.c b/src/log.c
index a020817507b8ecbe88130cf42903826ec218cdc7..964bf22b44c84464033265da5d6aefe550b4f71d 100644
--- a/src/log.c
+++ b/src/log.c
@@ -59,6 +59,7 @@
 #include <utils/strings.h>
 #include <utils/newasm.h>
 #include <graphics/newcrt.h>
+#include <utils/logger.h>
 
 #include "settings.h"
 #include "logstructs.h"
@@ -716,33 +717,6 @@ static void vmessageflag(char *msg, int b)
 	}
 }
 
-void tracemessage(char *msg)
-{
-	if (!gg.traceflag)
-		return;
-	if (!gg.traceopen)
-	{
-		if (*tracefname == '\0')
-		{
-			do
-			{
-				sprintf(tracefname, "/tmp/%.10s%03ld",
-						cuserid(NULL), rand() % 1000L);
-
-			} while (access(tracefname, F_OK) == 0);
-		}
-		if (tracefile != NULL)
-			tracefile = freopen(tracefname, "a", tracefile);
-		else
-			tracefile = fopen(tracefname, "a");
-		if (tracefile == NULL)
-			_EscIO(FileNotFound);
-		gg.traceopen = true;
-	}
-	fprintf(tracefile, "%s\n", msg);
-}
-
-
 static void dumpmessage(char *msg)
 {
 	if (*dumpfname == '\0')
diff --git a/src/utils/logger.c b/src/utils/logger.c
new file mode 100644
index 0000000000000000000000000000000000000000..39dc5a01f48f742cc95a727b7ebdc0163506dc92
--- /dev/null
+++ b/src/utils/logger.c
@@ -0,0 +1,30 @@
+#include "utils/logger.h"
+#include "logglobals.h"
+
+void tracemessage(char *msg)
+{
+	if (!gg.traceflag)
+		return;
+
+	if (!gg.traceopen)
+	{
+		if (*tracefname == '\0')
+		{
+			do
+			{
+				sprintf(tracefname, "/tmp/%.10s%03ld",
+						cuserid(NULL), rand() % 1000L);
+
+			} while (access(tracefname, F_OK) == 0);
+		}
+		if (tracefile != NULL)
+			tracefile = freopen(tracefname, "a", tracefile);
+		else
+			tracefile = fopen(tracefname, "a");
+		if (tracefile == NULL)
+			_EscIO(FileNotFound);
+		gg.traceopen = true;
+	}
+	
+	fprintf(tracefile, "%s\n", msg);
+}