diff --git a/logging.conf b/logging.conf new file mode 100644 index 00000000..6517a54a --- /dev/null +++ b/logging.conf @@ -0,0 +1,28 @@ +[loggers] +keys=root,src + +[handlers] +keys=consoleHandler + +[formatters] +keys=sampleFormatter + +[logger_root] +level=INFO +handlers=consoleHandler +propagate=0 + +[logger_src] +level=DEBUG +qualname=src +handlers=consoleHandler +propagate=0 + +[handler_consoleHandler] +class=StreamHandler +level=DEBUG +formatter=sampleFormatter +args=(sys.stdout,) + +[formatter_sampleFormatter] +format=%(asctime)s %(levelname)s %(name)s %(message)s diff --git a/src/environment.py b/src/environment.py index 86db03dd..f78290eb 100644 --- a/src/environment.py +++ b/src/environment.py @@ -1,22 +1,6 @@ """Project Global Constants.""" -import argparse -import logging from pathlib import Path PROJECT_ROOT = Path(__file__).parent.parent QUERY_PATH = PROJECT_ROOT / Path("src/sql") - - -def parse_log_level() -> str: - """Parses Global Log Level from runtime arguments (default = INFO)""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-l", "--log-level", type=str, default="INFO", help="set log level" - ) - args, _ = parser.parse_known_args() - level: str = args.log_level.upper() - logging.info(f"Global Log Level configured as {level}") - return level - - -LOG_LEVEL = parse_log_level() +LOG_CONFIG_FILE = PROJECT_ROOT / Path("logging.conf") diff --git a/src/logger.py b/src/logger.py index 0e12a80f..273e1024 100644 --- a/src/logger.py +++ b/src/logger.py @@ -1,23 +1,15 @@ """Easy universal log configuration """ import logging.config -import sys from logging import Logger -from src.environment import LOG_LEVEL +from src.environment import LOG_CONFIG_FILE def set_log(name: str) -> Logger: - """ - Instantiates and returns a logger with the name defined by the caller. - Used by any file which wants to inherit the global log level configuration - and assigns the desired naming convention (usually `__name__`) - """ + """Removes redundancy when setting log in each file""" log = logging.getLogger(name) - try: - log.setLevel(level=LOG_LEVEL) - except ValueError: - logging.error(f"Invalid log level: {LOG_LEVEL}") - sys.exit(1) - + logging.config.fileConfig( + fname=LOG_CONFIG_FILE.absolute(), disable_existing_loggers=True + ) return log diff --git a/src/main.py b/src/main.py index 8155c9b9..d45686d3 100644 --- a/src/main.py +++ b/src/main.py @@ -1,7 +1,6 @@ """Main Entry point for app_hash sync""" import argparse import asyncio -import logging.config import os from dataclasses import dataclass from pathlib import Path @@ -10,15 +9,14 @@ from src.fetch.dune import DuneFetcher from src.fetch.orderbook import OrderbookFetcher +from src.logger import set_log from src.models.tables import SyncTable from src.post.aws import AWSClient from src.sync import sync_app_data from src.sync.config import SyncConfig, AppDataSyncConfig from src.sync.order_rewards import sync_order_rewards, sync_batch_rewards -log = logging.getLogger(__name__) -logging.basicConfig(format="%(asctime)s %(levelname)s %(name)s %(message)s") -log.setLevel(logging.DEBUG) +log = set_log(__name__) @dataclass