diff --git a/run.py b/run.py
index 556cd0b59ed023178fa7e6df1b5b03b9f6c5f157..e53bcd6129311f1da3c20fa9392d949aa1a15786 100644
--- a/run.py
+++ b/run.py
@@ -3,8 +3,8 @@ __date__ = '2019-11-14'
 
 
 import argparse
-import logging
 
+from src.helpers import Logger
 from src.run_modules.experiment_setup import ExperimentSetup
 from src.run_modules.model_setup import ModelSetup
 from src.run_modules.post_processing import PostProcessing
@@ -12,6 +12,8 @@ from src.run_modules.pre_processing import PreProcessing
 from src.run_modules.run_environment import RunEnvironment
 from src.run_modules.training import Training
 
+Logger()
+
 
 def main(parser_args):
 
@@ -29,10 +31,6 @@ def main(parser_args):
 
 if __name__ == "__main__":
 
-    formatter = '%(asctime)s - %(levelname)s: %(message)s  [%(filename)s:%(funcName)s:%(lineno)s]'
-    logging.basicConfig(format=formatter, level=logging.INFO)
-    # logging.basicConfig(format=formatter, level=logging.DEBUG)
-
     parser = argparse.ArgumentParser()
     parser.add_argument('--experiment_date', metavar='--exp_date', type=str, default=None,
                         help="set experiment date as string")
diff --git a/src/helpers.py b/src/helpers.py
index 073a7bbf9ae3b7041591d48e4e5b7f3ef0efae42..3251b5d298fcba60587e2efb43f5e7ec575f398b 100644
--- a/src/helpers.py
+++ b/src/helpers.py
@@ -4,12 +4,13 @@ __author__ = 'Lukas Leufen, Felix Kleinert'
 __date__ = '2019-10-21'
 
 
+import datetime as dt
 import logging
 import math
 import os
-import time
 import socket
-import datetime as dt
+import sys
+import time
 
 import keras.backend as K
 import xarray as xr
@@ -218,3 +219,31 @@ def list_pop(list_full: list, pop_items):
 def dict_pop(dict_orig: Dict, pop_keys):
     pop_keys = to_list(pop_keys)
     return {k: v for k, v in dict_orig.items() if k not in pop_keys}
+
+
+class Logger:
+
+    def __init__(self, log_path=None):
+
+        if not log_path:
+            log_path = os.path.dirname(sys.modules["__main__"].__file__)
+            log_path = os.path.join(log_path, "logging")
+        if not os.path.exists(log_path):
+            os.makedirs(log_path)
+        runtime = time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime())
+        log_file = os.path.join(log_path, f'logging_{runtime}.log')
+
+        formatter = '%(asctime)s - %(levelname)s: %(message)s  [%(filename)s:%(funcName)s:%(lineno)s]'
+        logging.basicConfig(level=logging.DEBUG,
+                            format=formatter,
+                            filename=log_file,
+                            filemode='a')
+        # define a Handler which writes INFO messages or higher to the sys.stderr
+        console = logging.StreamHandler()
+        console.setLevel(logging.INFO)
+        # set a format which is simpler for console use
+        formatter = logging.Formatter(formatter)
+        # tell the handler to use this format
+        console.setFormatter(formatter)
+        # add the handler to the root logger
+        logging.getLogger('').addHandler(console)