logger refactoring, adapted to new parallel code
This commit is contained in:
parent
0d7f31c0cd
commit
2e8af90543
131
quacc/logger.py
131
quacc/logger.py
|
@ -5,137 +5,6 @@ import threading
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
class Logger:
|
|
||||||
__logger_file = "quacc.log"
|
|
||||||
__logger_name = "queue_logger"
|
|
||||||
__manager = None
|
|
||||||
__queue = None
|
|
||||||
__thread = None
|
|
||||||
__setup = False
|
|
||||||
__handlers = []
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def __logger_listener(cls, q):
|
|
||||||
while True:
|
|
||||||
record = q.get()
|
|
||||||
if record is None:
|
|
||||||
break
|
|
||||||
root = logging.getLogger("listener")
|
|
||||||
root.handle(record)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setup(cls):
|
|
||||||
if cls.__setup:
|
|
||||||
return
|
|
||||||
|
|
||||||
# setup root
|
|
||||||
root = logging.getLogger("listener")
|
|
||||||
root.setLevel(logging.DEBUG)
|
|
||||||
rh = logging.FileHandler(cls.__logger_file, mode="a")
|
|
||||||
rh.setLevel(logging.DEBUG)
|
|
||||||
root.addHandler(rh)
|
|
||||||
|
|
||||||
# setup logger
|
|
||||||
if cls.__manager is None:
|
|
||||||
cls.__manager = multiprocessing.Manager()
|
|
||||||
|
|
||||||
if cls.__queue is None:
|
|
||||||
cls.__queue = cls.__manager.Queue()
|
|
||||||
|
|
||||||
logger = logging.getLogger(cls.__logger_name)
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
qh = logging.handlers.QueueHandler(cls.__queue)
|
|
||||||
qh.setLevel(logging.DEBUG)
|
|
||||||
qh.setFormatter(
|
|
||||||
logging.Formatter(
|
|
||||||
fmt="%(asctime)s| %(levelname)-8s %(message)s",
|
|
||||||
datefmt="%d/%m/%y %H:%M:%S",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
logger.addHandler(qh)
|
|
||||||
|
|
||||||
# start listener
|
|
||||||
cls.__thread = threading.Thread(
|
|
||||||
target=cls.__logger_listener,
|
|
||||||
args=(cls.__queue,),
|
|
||||||
)
|
|
||||||
cls.__thread.start()
|
|
||||||
|
|
||||||
cls.__setup = True
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def add_handler(cls, path: Path):
|
|
||||||
root = logging.getLogger("listener")
|
|
||||||
rh = logging.FileHandler(path, mode="a")
|
|
||||||
rh.setLevel(logging.DEBUG)
|
|
||||||
cls.__handlers.append(rh)
|
|
||||||
root.addHandler(rh)
|
|
||||||
root.info("-" * 100)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def clear_handlers(cls):
|
|
||||||
root = logging.getLogger("listener")
|
|
||||||
for h in cls.__handlers:
|
|
||||||
root.removeHandler(h)
|
|
||||||
cls.__handlers.clear()
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def queue(cls):
|
|
||||||
if not cls.__setup:
|
|
||||||
cls.setup()
|
|
||||||
|
|
||||||
return cls.__queue
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def logger(cls):
|
|
||||||
if not cls.__setup:
|
|
||||||
cls.setup()
|
|
||||||
|
|
||||||
return logging.getLogger(cls.__logger_name)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def close(cls):
|
|
||||||
if cls.__setup and cls.__thread is not None:
|
|
||||||
cls.__queue.put(None)
|
|
||||||
cls.__thread.join()
|
|
||||||
# cls.__manager.close()
|
|
||||||
|
|
||||||
|
|
||||||
class SubLogger:
|
|
||||||
__queue = None
|
|
||||||
__setup = False
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setup(cls, q):
|
|
||||||
if cls.__setup:
|
|
||||||
return
|
|
||||||
|
|
||||||
cls.__queue = q
|
|
||||||
|
|
||||||
# setup root
|
|
||||||
root = logging.getLogger()
|
|
||||||
root.setLevel(logging.DEBUG)
|
|
||||||
rh = logging.handlers.QueueHandler(q)
|
|
||||||
rh.setLevel(logging.DEBUG)
|
|
||||||
rh.setFormatter(
|
|
||||||
logging.Formatter(
|
|
||||||
fmt="%(asctime)s| %(levelname)-12s%(message)s",
|
|
||||||
datefmt="%d/%m/%y %H:%M:%S",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
root.addHandler(rh)
|
|
||||||
|
|
||||||
cls.__setup = True
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def logger(cls):
|
|
||||||
if not cls.__setup:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return logging.getLogger()
|
|
||||||
|
|
||||||
|
|
||||||
_logger_manager = None
|
_logger_manager = None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
from traceback import print_exception as traceback
|
from traceback import print_exception as traceback
|
||||||
|
|
||||||
import quacc.evaluation.comp as comp
|
import quacc.evaluation.comp as comp
|
||||||
|
|
||||||
|
# from quacc.logger import Logger
|
||||||
|
from quacc import logger
|
||||||
from quacc.dataset import Dataset
|
from quacc.dataset import Dataset
|
||||||
from quacc.environment import env
|
from quacc.environment import env
|
||||||
from quacc.evaluation.estimators import CE
|
from quacc.evaluation.estimators import CE
|
||||||
from quacc.logger import Logger
|
|
||||||
from quacc.utils import create_dataser_dir
|
from quacc.utils import create_dataser_dir
|
||||||
|
|
||||||
|
|
||||||
def estimate_comparison():
|
def estimate_comparison():
|
||||||
log = Logger.logger()
|
# log = Logger.logger()
|
||||||
|
log = logger.logger()
|
||||||
for conf in env.load_confs():
|
for conf in env.load_confs():
|
||||||
dataset = Dataset(
|
dataset = Dataset(
|
||||||
env.DATASET_NAME,
|
env.DATASET_NAME,
|
||||||
|
@ -21,7 +24,8 @@ def estimate_comparison():
|
||||||
dataset.name,
|
dataset.name,
|
||||||
update=env.DATASET_DIR_UPDATE,
|
update=env.DATASET_DIR_UPDATE,
|
||||||
)
|
)
|
||||||
Logger.add_handler(env.OUT_DIR / f"{dataset.name}.log")
|
# Logger.add_handler(env.OUT_DIR / f"{dataset.name}.log")
|
||||||
|
logger.add_handler(env.OUT_DIR / f"{dataset.name}.log")
|
||||||
try:
|
try:
|
||||||
dr = comp.evaluate_comparison(
|
dr = comp.evaluate_comparison(
|
||||||
dataset,
|
dataset,
|
||||||
|
@ -32,18 +36,22 @@ def estimate_comparison():
|
||||||
log.error(f"Evaluation over {dataset.name} failed. Exception: {e}")
|
log.error(f"Evaluation over {dataset.name} failed. Exception: {e}")
|
||||||
traceback(e)
|
traceback(e)
|
||||||
|
|
||||||
Logger.clear_handlers()
|
# Logger.clear_handlers()
|
||||||
|
logger.clear_handlers()
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
log = Logger.logger()
|
# log = Logger.logger()
|
||||||
|
log = logger.setup_logger()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
estimate_comparison()
|
estimate_comparison()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f"estimate comparison failed. Exception: {e}")
|
log.error(f"estimate comparison failed. Exception: {e}")
|
||||||
traceback(e)
|
traceback(e)
|
||||||
|
|
||||||
Logger.close()
|
# Logger.close()
|
||||||
|
logger.logger_manager().close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue