Skip to content
Snippets Groups Projects
Commit cf7cffd2 authored by Daniel Scheffler's avatar Daniel Scheffler
Browse files

EnMAPL1Product_SensorGeo.log attribute is now working and returns all logged messages.

parent cc34c4a7
Branches
Tags
1 merge request!10Enhancement/revise logging
Pipeline #
......@@ -386,7 +386,6 @@ class EnMAPL1Product_SensorGeo(object):
"""
# protected attributes
self._logger = None
self._log = ''
# populate attributes
self.cfg = config
......@@ -399,7 +398,7 @@ class EnMAPL1Product_SensorGeo(object):
self.detector_attrNames = ['vnir', 'swir']
@property
def logger(self):
def logger(self) -> EnPT_Logger:
"""Get a an instance of enpt.utils.logging.EnPT_Logger.
NOTE:
......@@ -437,18 +436,18 @@ class EnMAPL1Product_SensorGeo(object):
# self.log += self.logger.captured_stream
self._logger = logger
@property # FIXME does not work yet
def log(self):
@property
def log(self) -> str:
"""Return a string of all logged messages until now.
NOTE: self.log can also be set to a string.
"""
return self._log
return self.logger.captured_stream
@log.setter
def log(self, string):
def log(self, string: str):
assert isinstance(string, str), "'log' can only be set to a string. Got %s." % type(string)
self._log = string
self.logger.captured_stream = string
def get_paths(self):
"""Get all file paths associated with the current instance of EnMAPL1Product_SensorGeo.
......
......@@ -5,6 +5,7 @@ import logging
import os
import warnings
import sys
from io import StringIO # Python 3 only
class EnPT_Logger(logging.Logger):
......@@ -51,11 +52,11 @@ class EnPT_Logger(logging.Logger):
else:
fileHandler = None
# create StreamHandler # TODO add a StringIO handler
# self.streamObj = StringIO()
# self.streamHandler = logging.StreamHandler(stream=self.streamObj)
# self.streamHandler.setFormatter(formatter)
# self.streamHandler.set_name('StringIO handler')
# create StreamHandler
self.streamObj = StringIO()
self.streamHandler = logging.StreamHandler(stream=self.streamObj)
self.streamHandler.setFormatter(self.formatter_fileH)
self.streamHandler.set_name('StringIO handler')
# create ConsoleHandler for logging levels DEGUG and INFO -> logging to sys.stdout
consoleHandler_out = logging.StreamHandler(stream=sys.stdout) # by default it would go to sys.stderr
......@@ -75,28 +76,10 @@ class EnPT_Logger(logging.Logger):
if not self.handlers:
if fileHandler:
self.addHandler(fileHandler)
# self.addHandler(self.streamHandler)
self.addHandler(self.streamHandler)
self.addHandler(consoleHandler_out)
self.addHandler(consoleHandler_err)
# if append:
# logfileHandler = logging.FileHandler(path_logfile, mode='a')
# else:
# logfileHandler = logging.FileHandler(path_logfile, mode='w')
# logfileHandler.setFormatter(formatter)
# logfileHandler.setLevel(logging.CRITICAL)
# consoleHandler_out = logging.StreamHandler()
# consoleHandler_out.setFormatter(formatter)
# consoleHandler_out.setLevel(logging.CRITICAL)
# # logger.setLevel(logging.DEBUG)
# if CPUs == 1:
# if not logger.handlers:
# logger.addHandler(logfileHandler)
# logger.addHandler(consoleHandler_out)
# else:
# logger.addHandler(logfileHandler)
# logger.addHandler(consoleHandler_out)
def __getstate__(self):
self.close()
return self.__dict__
......@@ -109,14 +92,12 @@ class EnPT_Logger(logging.Logger):
return ObjDict
@property
def captured_stream(self):
def captured_stream(self) -> str:
"""Return the already captured logging stream.
NOTE:
- set self.captured_stream:
self.captured_stream = 'any string'
:return: str
"""
if not self._captured_stream:
self._captured_stream = self.streamObj.getvalue()
......@@ -124,27 +105,22 @@ class EnPT_Logger(logging.Logger):
return self._captured_stream
@captured_stream.setter
def captured_stream(self, string):
def captured_stream(self, string: str):
assert isinstance(string, str), "'captured_stream' can only be set to a string. Got %s." % type(string)
self._captured_stream = string
def close(self):
"""Close all logging handlers."""
# update captured_stream and flush stream
# self.captured_stream += self.streamObj.getvalue()
# print(self.handlers[:])
# self.removeHandler(self.streamHandler)
# print(dir(self.streamHandler))
# self.streamHandler = None
self.captured_stream += self.streamObj.getvalue()
for handler in self.handlers[:]:
try:
# if handler.get_name() == 'StringIO handler':
# self.streamObj.flush()
# self.streamHandler.flush()
if handler.get_name() == 'StringIO handler':
self.streamObj.flush()
self.streamHandler.flush()
self.removeHandler(handler) # if not called with '[:]' the StreamHandlers are left open
handler.flush()
# handler.flush()
handler.close()
except PermissionError:
warnings.warn('Could not properly close logfile due to a PermissionError: %s' % sys.exc_info()[1])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment