diff --git a/src/mqtt_influx_backend/jsonhandler.py b/src/mqtt_influx_backend/jsonhandler.py
index 9b28ec34354681fc099c8c122b5b273213ba122f..6d2744f5b8f8fe334d074625710f0d24f74aaeb4 100644
--- a/src/mqtt_influx_backend/jsonhandler.py
+++ b/src/mqtt_influx_backend/jsonhandler.py
@@ -1,14 +1,23 @@
 import json
+import os
 
-file_name = "src/mqtt_influx_backend/mac_to_room.json"
-
-def load_json():
+def load_json(file_name: str)  -> dict:
+    """
+    ladet eine JSON Datei, wenn diese existiert, 
+    und gibt diese als dictionary zurück
+    key : value 
+    """
+    if not os.path.exists(file_name):
+        return {}
     with open(file_name) as f:
         mac_room_mapping = json.load(f)
     return mac_room_mapping
 
-
-def write_json(mac_room_mapping: dict):
+def write_json(mac_room_mapping: dict, file_name: str):
+    """
+    Nimmt ein dictionary und schreibt dessen 
+    Inhalte in eine JSON Datei
+    """
     with open(file_name, "w") as f:
         f.seek(0)
         json.dump(mac_room_mapping, f, indent=4)
diff --git a/src/mqtt_influx_backend/loggingFactory.py b/src/mqtt_influx_backend/loggingFactory.py
new file mode 100644
index 0000000000000000000000000000000000000000..99618a839c22235ee3cc1f147430e366e103095d
--- /dev/null
+++ b/src/mqtt_influx_backend/loggingFactory.py
@@ -0,0 +1,35 @@
+import logging
+import os
+from logging.handlers import RotatingFileHandler
+
+LOG_DIR = "logs"
+LOG_FILE = "app.log"
+LOG_PATH = os.path.join(LOG_DIR, LOG_FILE)
+
+class LoggerFactory:
+
+    #logger.info("Connected with result code %s", str(rc))
+    #logger.warning("Neue MAC-Adresse gefunden: %s", mac)
+    #logger.error("Failed writing to InfluxDb: %s", e)
+
+    @staticmethod
+    def get_logger(name: str, level=logging.DEBUG) -> logging.Logger:
+        if not os.path.exists(LOG_DIR):
+            os.makedirs(LOG_DIR)
+
+        logger = logging.getLogger(name)
+        if logger.hasHandlers():
+            return logger  # vermeidet doppelte Handler
+
+        logger.setLevel(level)
+
+        formatter = logging.Formatter(
+            '[%(asctime)s] %(levelname)s in %(name)s: %(message)s',
+            datefmt='%Y-%m-%d %H:%M:%S'
+        )
+
+        file_handler = RotatingFileHandler(LOG_PATH, maxBytes=5_000_000, backupCount=5)
+        file_handler.setFormatter(formatter)
+        logger.addHandler(file_handler)
+
+        return logger
diff --git a/src/mqtt_influx_backend/mQTTClientHandler.py b/src/mqtt_influx_backend/mQTTClientHandler.py
index f19664594e145b5cca2b04417df37ad15111f9b0..ed4ffb3895ce64184ca89047666bad3da5cb7fd8 100644
--- a/src/mqtt_influx_backend/mQTTClientHandler.py
+++ b/src/mqtt_influx_backend/mQTTClientHandler.py
@@ -1,5 +1,6 @@
 import json
 
+from src.mqtt_influx_backend.loggingFactory import LoggerFactory
 from datetime import datetime
 import paho.mqtt.client as mqtt
 from src.mqtt_influx_backend import jsonhandler
@@ -7,6 +8,7 @@ from src.mqtt_influx_backend import influxDBWriter
 
 class MQTTClientHandler:
 
+    MAPPING_FILE_NAME = "src/mqtt_influx_backend/mac_to_room.json"
     MEASUREMENT_NAME = "sensor_data"
     TAG_ROOM = "room"
     TAG_MAC = "mac"
@@ -16,8 +18,9 @@ class MQTTClientHandler:
 
     # Konstruktor
     def __init__(self, broker_url: str, topic: str, influx_writer: influxDBWriter):
-        # logger sollte hier zugeweist werden
-        self.mac_to_room = jsonhandler.load_json()
+        self.logger = LoggerFactory.get_logger(__name__)
+        # key: mac : value : room
+        self.mac_to_room = jsonhandler.load_json(self.MAPPING_FILE_NAME)
         self.broker_url = broker_url
         self.topic = topic
         self.influx_writer = influx_writer
@@ -27,9 +30,9 @@ class MQTTClientHandler:
         self.client.on_message = self.on_message
 
     def on_connect(self, client, userdata, flags, rc):
-        # log
-        print("Connected with result code " + str(rc))
+        self.logger.info("Connected with result code " + str(rc))
         client.subscribe(self.topic)
+        self.logger.info("Subscribed to " + self.topic )
 
     # eventuell refactorn und die Aufgaben in Methoden aufteilen
     def on_message(self, client, userdata, msg):
@@ -40,24 +43,23 @@ class MQTTClientHandler:
         """
         msg = json.loads(msg.payload)
         metadate = msg["metadata"]
-        # key: mac : value : room
+        
         # hier prüfen, ob die Mac-Adresse einen Raum hat,
         # wenn nicht trage es in mac_to_room leer ein
         # "aa:bb:cc:dd:ee:ff" : ""
         mac = metadate["mac-address"]
         
         if mac not in self.mac_to_room:
-            # log
-            print(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.")
+            self.logger.warning(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.")
             self.mac_to_room[mac] = ""  # leerer Platzhalter
-            jsonhandler.write_json(self.mac_to_room)
-            self.mac_to_room = jsonhandler.load_json()
+            jsonhandler.write_json(self.mac_to_room, self.MAPPING_FILE_NAME)
+            self.mac_to_room = jsonhandler.load_json(self.MAPPING_FILE_NAME)
             return
         
         self.write_to_influxDB(msg,metadate)
 
 
-    def write_to_influxDB(self, msg, metadate):
+    def write_to_influxDB(self, msg : dict, metadate: dict):
         try:
             self.influx_writer.write_point(
                 measurement=self.MEASUREMENT_NAME,
@@ -70,16 +72,11 @@ class MQTTClientHandler:
                     self.FIELD_TEMP: msg["temp"],
                     self.FIELD_HUMIDITY: msg["rh"],
                 },
-                timestamp=metadate["time"],
+                timestamp=metadate["time"], #fix
             )
-            print(
-                "Wrote to InfluxDB:", msg
-            )  # muss später rausgeschmiessen werden
+            print("Wrote to InfluxDB:", msg)  # muss später rausgeschmiessen werden
         except Exception as e:
-            # log
-            print("Failed writing to InfluxDb: ",e)
-    
-    
+            self.logger.error(f"Failed writing to InfluxDb: {e}")    
 
     def start(self):
         self.client.connect(self.broker_url)
diff --git a/src/mqtt_influx_backend/mac_to_room.json b/src/mqtt_influx_backend/mac_to_room.json
index 8c3f01a2d7412684ee3756f31f107c3d6b5e1456..d6a303c1c2d93dd2193c5c29ea89d89bb60baba8 100644
--- a/src/mqtt_influx_backend/mac_to_room.json
+++ b/src/mqtt_influx_backend/mac_to_room.json
@@ -2,5 +2,6 @@
     "AA:BB:CC:DD:EE:FF": "Wohnzimmer",
     "11:22:33:44:55:66": "K\u00fcche",
     "77:88:99:AA:BB:CC": "Schlafzimmer",
-    "DE:AD:BE:EF:12:34": ""
+    "DE:AD:BE:EF:12:34": "",
+    "DK:AD:BE:EF:12:34": ""
 }
\ No newline at end of file
diff --git a/src/mqtt_influx_backend/main.py b/src/mqtt_influx_backend/main.py
index ef8397f884e31bc284555f26594cf9bf5d2fa5b2..168546e063365924d7877ef27373e195344e4e1b 100644
--- a/src/mqtt_influx_backend/main.py
+++ b/src/mqtt_influx_backend/main.py
@@ -4,26 +4,10 @@ import logging
 from src.mqtt_influx_backend.mQTTClientHandler import MQTTClientHandler
 from src.mqtt_influx_backend.influxDBWriter import InfluxDBWriter
 
-
-def get_logger(name: str = "default_logger") -> logging.Logger:
-    logger = logging.getLogger(name)
-    if (
-        not logger.handlers
-    ):  # Verhindert doppelte Handler bei mehrfacher Initialisierung
-        logger.setLevel(logging.DEBUG)
-        handler = logging.StreamHandler()
-        formatter = logging.Formatter(
-            "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
-        )
-        handler.setFormatter(formatter)
-        logger.addHandler(handler)
-    return logger
-
-
 load_dotenv()
 
-
 def main():
+
     influx_writer = InfluxDBWriter(
         url=os.getenv("INFLUXDB_URL"),
         token=os.getenv("INFLUXDB_TOKEN"),