diff --git a/src/constants.py b/src/constants.py new file mode 100644 index 0000000..376bd88 --- /dev/null +++ b/src/constants.py @@ -0,0 +1,8 @@ +import os +from dotenv import load_dotenv + +load_dotenv(dotenv_path="../.env", override=True) + +LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() +LOG_PATH = os.getenv("LOG_PATH", "/tmp/logs") +LOG_CLEAR = os.getenv("LOG_CLEAR", "False").capitalize() diff --git a/src/init.py b/src/init.py new file mode 100644 index 0000000..68a786d --- /dev/null +++ b/src/init.py @@ -0,0 +1,35 @@ +import os +from logger import init_logger +from constants import LOG_PATH, LOG_CLEAR, LOG_LEVEL + +if not os.path.exists(LOG_PATH): + os.mkdir(LOG_PATH) +else: + pass + +log_files = ( + f"{LOG_PATH}/app.log", + f"{LOG_PATH}/app.warning.log", + f"{LOG_PATH}/app.error.log", +) + +if LOG_LEVEL == "DEBUG": + testing_mode = True +else: + testing_mode = False + +logger = init_logger(__name__, testing_mode=testing_mode) + +if LOG_CLEAR == "True": + try: + for log_file in log_files: + if os.path.exists(log_file): + with open(log_file, "r+") as t: + t.truncate(0) + else: + pass + except Exception as e: + logger.error(e) + raise +else: + pass diff --git a/src/logger.py b/src/logger.py new file mode 100644 index 0000000..f9ab4fd --- /dev/null +++ b/src/logger.py @@ -0,0 +1,44 @@ +import logging +import colorlog +from constants import LOG_PATH + + +def init_logger(dunder_name, testing_mode) -> logging.Logger: + log_format = ( + "%(asctime)s - " + "%(name)s - " + "%(funcName)s - " + "%(levelname)s - " + "%(message)s" + ) + """ Initialize logging """ + + bold_seq = "\033[1m" + colorlog_format = f"{bold_seq} " "%(log_color)s " f"{log_format}" + colorlog.basicConfig(format=colorlog_format) + logger = logging.getLogger(dunder_name) + + if testing_mode: + logger.setLevel(logging.DEBUG) + else: + logger.setLevel(logging.INFO) + + fh = logging.FileHandler(f"{LOG_PATH}/app.log") + fh.setLevel(logging.DEBUG) + formatter = logging.Formatter(log_format) + fh.setFormatter(formatter) + logger.addHandler(fh) + + fh = logging.FileHandler(f"{LOG_PATH}/app.warning.log") + fh.setLevel(logging.WARNING) + formatter = logging.Formatter(log_format) + fh.setFormatter(formatter) + logger.addHandler(fh) + + fh = logging.FileHandler(f"{LOG_PATH}/app.error.log") + fh.setLevel(logging.ERROR) + formatter = logging.Formatter(log_format) + fh.setFormatter(formatter) + logger.addHandler(fh) + + return logger