From 4a401a5771796283e2660edf69ab9fc7a2602ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Wed, 9 Jun 2021 08:07:44 +0200 Subject: [PATCH] logger policy in env --- src/scgenerator/const.py | 1 + src/scgenerator/env.py | 26 ++++++++++++++++------ src/scgenerator/logger.py | 45 +++++++++++++++++++-------------------- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/scgenerator/const.py b/src/scgenerator/const.py index dcc40c5..3d6c881 100644 --- a/src/scgenerator/const.py +++ b/src/scgenerator/const.py @@ -258,6 +258,7 @@ valid_variable = dict( ENVIRON_KEY_BASE = "SCGENERATOR_" PBAR_POLICY = ENVIRON_KEY_BASE + "PBAR_POLICY" +LOG_POLICY = ENVIRON_KEY_BASE + "LOG_POLICY" TMP_FOLDER_KEY_BASE = ENVIRON_KEY_BASE + "SC_TMP_" PREFIX_KEY_BASE = ENVIRON_KEY_BASE + "PREFIX_" PARAM_SEPARATOR = " " diff --git a/src/scgenerator/env.py b/src/scgenerator/env.py index bcd9cbb..591ea53 100644 --- a/src/scgenerator/env.py +++ b/src/scgenerator/env.py @@ -1,8 +1,8 @@ import os from pathlib import Path -from typing import Dict, List, Literal, Optional +from typing import Dict, Literal, Optional, Set -from .const import ENVIRON_KEY_BASE, PBAR_POLICY, TMP_FOLDER_KEY_BASE +from .const import ENVIRON_KEY_BASE, PBAR_POLICY, LOG_POLICY, TMP_FOLDER_KEY_BASE def data_folder(task_id: int) -> Optional[Path]: @@ -17,13 +17,25 @@ def all_environ() -> Dict[str, str]: return d -def pbar_policy() -> List[Literal["print", "file"]]: +def pbar_policy() -> Set[Literal["print", "file"]]: policy = os.getenv(PBAR_POLICY) if policy == "print" or policy is None: - return ["print"] + return {"print"} elif policy == "file": - return ["file"] + return {"file"} elif policy == "both": - return ["file", "print"] + return {"file", "print"} else: - return [] + return set() + + +def log_policy() -> Set[Literal["print", "file"]]: + policy = os.getenv(LOG_POLICY) + if policy == "print" or policy is None: + return {"print"} + elif policy == "file": + return {"file"} + elif policy == "both": + return {"file", "print"} + else: + return set() diff --git a/src/scgenerator/logger.py b/src/scgenerator/logger.py index e46af74..a971056 100644 --- a/src/scgenerator/logger.py +++ b/src/scgenerator/logger.py @@ -1,18 +1,19 @@ import logging from typing import Optional +from .env import log_policy -class DebugOnlyFileHandler(logging.FileHandler): - def __init__( - self, filename, mode: str, encoding: Optional[str] = None, delay: bool = False - ) -> None: - super().__init__(filename, mode=mode, encoding=encoding, delay=delay) - self.setLevel(logging.DEBUG) +# class DebugOnlyFileHandler(logging.FileHandler): +# def __init__( +# self, filename, mode: str, encoding: Optional[str] = None, delay: bool = False +# ) -> None: +# super().__init__(filename, mode=mode, encoding=encoding, delay=delay) +# self.setLevel(logging.DEBUG) - def emit(self, record: logging.LogRecord) -> None: - if not record.levelno == logging.DEBUG: - return - return super().emit(record) +# def emit(self, record: logging.LogRecord) -> None: +# if not record.levelno == logging.DEBUG: +# return +# return super().emit(record) DEFAULT_LEVEL = logging.INFO @@ -80,20 +81,18 @@ def configure_logger(logger): updated logger """ if not hasattr(logger, "already_configured"): - formatter = logging.Formatter("{levelname}: {name}: {message}", style="{") - file_handler1 = DebugOnlyFileHandler("sc-DEBUG.log", "a+") - file_handler1.setFormatter(formatter) - logger.addHandler(file_handler1) - file_handler2 = logging.FileHandler("sc-INFO.log", "a+") - file_handler2.setFormatter(formatter) - file_handler2.setLevel(logging.INFO) - logger.addHandler(file_handler2) - - stream_handler = logging.StreamHandler() - stream_handler.setLevel(logging.WARNING) - logger.addHandler(stream_handler) + if "file" in log_policy(): + formatter = logging.Formatter("{levelname}: {name}: {message}", style="{") + file_handler1 = logging.FileHandler("scgenerator.log", "a+") + file_handler1.setFormatter(formatter) + file_handler1.setLevel(logging.DEBUG) + logger.addHandler(file_handler1) + if "print" in log_policy(): + stream_handler = logging.StreamHandler() + stream_handler.setLevel(logging.INFO) + logger.addHandler(stream_handler) logger.setLevel(logging.DEBUG) logger.already_configured = True - return logger \ No newline at end of file + return logger