From dbb536f08b2921ddc343077129130c8e05e4c12e Mon Sep 17 00:00:00 2001 From: Michael Boniface <m.j.boniface@soton.ac.uk> Date: Tue, 18 Feb 2025 18:12:18 +0000 Subject: [PATCH] added initial logging setup but not updated any of the print statements yet as this breaks the tests which rely on sysout --- .gitignore | 1 + acmc.py | 8 +++++++- logging_config.py | 30 ++++++++++++++++++++++++++++++ phen.py | 7 ++++++- tests/test_acmc.py | 8 ++++++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 logging_config.py diff --git a/.gitignore b/.gitignore index b288717..a6a439e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__ *.bak *.save* ~$* +*.log # Build and output files build/* diff --git a/acmc.py b/acmc.py index f242887..528eaed 100644 --- a/acmc.py +++ b/acmc.py @@ -1,10 +1,15 @@ import argparse +import logging +from pathlib import Path +# acmc imports import trud import omop import phen -from pathlib import Path +# setup logging +from logging_config import setup_logger +logger = setup_logger() BUILD_PATH = Path('build') @@ -61,6 +66,7 @@ def phen_diff(args): args.phen_dir_old) def main(): + logger.info("ACMC Tool") parser = argparse.ArgumentParser(description="ACMC command-line tool") # Top-level commands diff --git a/logging_config.py b/logging_config.py new file mode 100644 index 0000000..d6bd752 --- /dev/null +++ b/logging_config.py @@ -0,0 +1,30 @@ +import logging + +DEFAULT_LOG_FILE = "acmc.log" + +def setup_logger(): + # Create a logger + logger = logging.getLogger('acmc_logger') + logger.setLevel(logging.DEBUG) + + if not logger.hasHandlers(): + #Create a file handler that logs to a file + file_handler = logging.FileHandler(DEFAULT_LOG_FILE) + file_handler.setLevel(logging.DEBUG) + + # Create a stream handler that prints to the console + stream_handler = logging.StreamHandler() + stream_handler.setLevel(logging.DEBUG) + + # Create a formatter for how the log messages should look + formatter = logging.Formatter('%(asctime)s - - %(levelname)s - %(message)s') + + # Add the formatter to both handlers + file_handler.setFormatter(formatter) + stream_handler.setFormatter(formatter) + + # Add the handlers to the logger + logger.addHandler(file_handler) + logger.addHandler(stream_handler) + + return logger diff --git a/phen.py b/phen.py index 03dd22e..f8a436d 100644 --- a/phen.py +++ b/phen.py @@ -8,17 +8,22 @@ import sys import shutil import git import re +import logging import requests from pathlib import Path from urllib.parse import urlparse, urlunparse -# acmc dependencies +# acmc imports import trud import omop from base import log_invalid_code, bcolors, raise_ from parse import Read2, Read3, Icd10, Snomed, Opcs4, Atc, code_types, vocab_types from omop import publish_concept_sets, setup +# setup logging +from logging_config import setup_logger +logger = setup_logger() + pd.set_option("mode.chained_assignment", None) PHEN_DIR = 'phen' diff --git a/tests/test_acmc.py b/tests/test_acmc.py index 4dbcf9e..c084f54 100644 --- a/tests/test_acmc.py +++ b/tests/test_acmc.py @@ -2,6 +2,7 @@ import pytest import argparse import sys import shutil +import logging import trud import omop @@ -21,6 +22,13 @@ def tmp_dir(): # Remove the directory after the test finishes shutil.rmtree(temp_dir) +@pytest.fixture +def logger(): + logger = logging.getLogger('acmc_logger') + logger.setLevel(logging.DEBUG) + stream_handler = logging.StreamHandler(sys.stdout) + logger.addHandler(stream_handler) + def test_phen_init_local_default(tmp_dir, monkeypatch, capsys): monkeypatch.setattr(sys, "argv", ["acmc.py", "phen", "init"]) # Mock input() to return "yes" to the question about reinitialising the directory -- GitLab