diff --git a/libtaskotron/logger.py b/libtaskotron/logger.py
--- a/libtaskotron/logger.py
+++ b/libtaskotron/logger.py
@@ -53,6 +53,11 @@
 #: our current file handler sending logged messages to file log
 file_handler = None
 
+#: our current memory handler sending logged messages to memory
+#: log prior to creating file log (after its creation, content
+#: of the memory log is flushed into the file log)
+mem_handler = None
+
 
 def _create_handlers(syslog=False, filelog_path=None):
     '''Create all handlers. This should be called before any method tries to
@@ -69,7 +74,7 @@
                              :data:`file_handler` is not created.
     :raise socket.error: if syslog handler creation failed
     '''
-    global stream_handler, syslog_handler, file_handler
+    global stream_handler, syslog_handler, file_handler, mem_handler
 
     if not stream_handler:
         stream_handler = logging.StreamHandler()
@@ -83,6 +88,10 @@
         file_handler = logging.FileHandler(filelog_path, encoding='UTF-8')
         file_handler.setFormatter(_formatter_full)
 
+    if not mem_handler:
+        mem_handler = logging.handlers.MemoryHandler(capacity=1024)
+        mem_handler.setFormatter(_formatter_full)
+
 
 def _log_excepthook(*exc_info):
     '''Called when an exception is not caught'''
@@ -119,8 +128,10 @@
 
     if level_stream is not None:
         stream_handler.setLevel(level_stream)
+
     rootlogger = logging.getLogger()
     rootlogger.addHandler(stream_handler)
+    rootlogger.addHandler(mem_handler)
 
     sys.excepthook = _log_excepthook
 
@@ -229,9 +240,21 @@
         file_handler = None
         _create_handlers(filelog_path=filelog_path)
         _set_level(file_handler, level_file, "log_level_file")
+
+        # forward all 'missed' messages from memory to file
+        # there's a method for automatically forwarding all messages from a
+        #  memory handler, but it does not respect target handler logging level.
+        # we need to do it manually
+        for record in mem_handler.buffer:
+            if record.levelno >= file_handler.level:
+                file_handler.handle(record)
+
+        mem_handler.close()
+        rootlogger.removeHandler(mem_handler)
         rootlogger.addHandler(file_handler)
         log.debug('File logging enabled with level %s into: %s',
                   logging.getLevelName(file_handler.level), filelog_path)
     else:
         rootlogger.removeHandler(file_handler)
+        rootlogger.removeHandler(mem_handler)
 
diff --git a/libtaskotron/runner.py b/libtaskotron/runner.py
--- a/libtaskotron/runner.py
+++ b/libtaskotron/runner.py
@@ -233,8 +233,6 @@
 def main():
     # Preliminary initialization of logging, so all messages before regular
     # initialization can be logged to stream.
-    # FIXME: Remove this once this ticket is resolved:
-    # https://phab.qadevel.cloud.fedoraproject.org/T273
     logger.init_prior_config()
 
     log.info('Execution started at: %s',
diff --git a/testing/functest_logger.py b/testing/functest_logger.py
--- a/testing/functest_logger.py
+++ b/testing/functest_logger.py
@@ -29,7 +29,6 @@
         if logger.stream_handler:
             logger.stream_handler.level = self.stream_level
 
-
     def test_logfile(self, tmpdir):
         '''Messages should be logged to file when enabled'''
         log_path = tmpdir.join('test.log').strpath
@@ -92,3 +91,28 @@
         logger.file_handler.flush()
 
         self.msg_in_tmp_log(msg, log_path)
+
+    def test_memhandler_to_logfile_level(self, tmpdir):
+        '''When forwarding messages from memory to file, only messages with
+        appropriate levels should be passed over'''
+        log_path = tmpdir.join('test.log').strpath
+        logger.init_prior_config()
+
+        # include random strings in the message for better reliability
+        msg1 = 'A debug message Xai(Deihee8a'
+        logger.log.debug(msg1)
+        msg2 = 'An info message aC2pu}i5chai'
+        logger.log.info(msg2)
+        msg3 = 'A warn message lai_choow5Ie'
+        logger.log.warn(msg3)
+
+        logger.init(filelog=True, filelog_path=log_path, level_file=logging.WARN)
+        logger.file_handler.flush()
+
+        with open(log_path) as log_file:
+            lines = log_file.readlines()
+
+        # msg1 nor msg2 should not be there, msg3 should be there
+        assert len([line for line in lines if msg1 in line]) == 0
+        assert len([line for line in lines if msg2 in line]) == 0
+        assert len([line for line in lines if msg3 in line]) == 1
diff --git a/testing/test_logger.py b/testing/test_logger.py
--- a/testing/test_logger.py
+++ b/testing/test_logger.py
@@ -85,3 +85,13 @@
         logger.init()
         assert logging.getLevelName(logger.stream_handler.level) != 'INVALID'
         assert logging.getLevelName(logger.stream_handler.level) == default_level
+
+    def test_memhandler(self, monkeypatch):
+        '''Records should be stored in memhandler between init_prior_config()
+        and init(), regardless of chosen stream level'''
+        logger.init_prior_config(level_stream=logging.WARN)
+
+        msg = 'Some initialization message'
+        logger.log.debug(msg)
+
+        assert logger.mem_handler.buffer[-1].getMessage() == msg

