Coverage for graphqler / utils / logging_utils.py: 88%
58 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-20 10:09 -0400
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-20 10:09 -0400
1import logging
2from graphqler import config
3from pathlib import Path
4from graphqler.utils.singleton import singleton
5from graphqler.utils.file_utils import initialize_file
8@singleton
9class Logger:
10 fuzzer_logger = None
11 compiler_logger = None
12 detector_logger = None
13 idor_logger = None
14 fuzzer_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.FUZZER_LOG_FILE_PATH)
15 compiler_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.COMPILER_LOG_FILE_PATH)
16 detector_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.DETECTOR_LOG_FILE_PATH)
17 idor_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.IDOR_LOG_FILE_PATH)
19 def __init__(self):
20 self.fuzzer_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.FUZZER_LOG_FILE_PATH)
21 self.compiler_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.COMPILER_LOG_FILE_PATH)
22 self.detector_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.DETECTOR_LOG_FILE_PATH)
23 self.idor_log_path = Path(config.OUTPUT_DIRECTORY) / Path(config.IDOR_LOG_FILE_PATH)
25 def get_fuzzer_logger(self) -> logging.Logger:
26 """Gets the fuzzer logger. Creates the logger if it doesn't exist, and creates the log file if it doesn't exist
28 Returns:
29 logging.Logger: The fuzzer logger
30 """
31 # create the log file if it doesn't exist
32 if not self.fuzzer_log_path.exists():
33 self.fuzzer_log_path.parent.mkdir(parents=True, exist_ok=True)
34 initialize_file(self.fuzzer_log_path)
36 # create the logger if it doesn't exist
37 if not self.fuzzer_logger or not self.fuzzer_logger.hasHandlers():
38 self.fuzzer_logger = self._get_logger("fuzzer", self.fuzzer_log_path)
40 # return the logger
41 return self.fuzzer_logger
43 def get_detector_logger(self) -> logging.Logger:
44 """Gets the detector logger. Creates the logger if it doesn't exist, and creates the log file if it doesn't exist
46 Returns:
47 logging.Logger: The detector logger
48 """
49 # create the log file if it doesn't exist
50 if not self.detector_log_path.exists():
51 self.detector_log_path.parent.mkdir(parents=True, exist_ok=True)
52 initialize_file(self.detector_log_path)
54 # create the logger if it doesn't exist
55 if not self.detector_logger or not self.detector_logger.hasHandlers():
56 self.detector_logger = self._get_logger("detector", self.detector_log_path)
58 # return the logger
59 return self.detector_logger
61 def get_compiler_logger(self) -> logging.Logger:
62 """Gets the compiler logger. Creates the logger if it doesn't exist, and creates the log file if it doesn't exist
64 Returns:
65 logging.Logger: The compiler logger
66 """
67 # create the log file if it doesn't exist
68 if not self.compiler_log_path.exists():
69 self.compiler_log_path.parent.mkdir(parents=True, exist_ok=True)
70 initialize_file(self.compiler_log_path)
72 # create the logger if it doesn't exist
73 if not self.compiler_logger:
74 self.compiler_logger = self._get_logger("compiler", self.compiler_log_path)
76 # return the logger
77 return self.compiler_logger
79 def get_idor_logger(self) -> logging.Logger:
80 """Gets the IDOR logger. Creates the logger if it doesn't exist, and creates the log file if it doesn't exist
82 Returns:
83 logging.Logger: The IDOR logger
84 """
85 # create the log file if it doesn't exist
86 if not self.idor_log_path.exists():
87 self.idor_log_path.parent.mkdir(parents=True, exist_ok=True)
88 initialize_file(self.idor_log_path)
90 # create the logger if it doesn't exist
91 if not self.idor_logger:
92 self.idor_logger = self._get_logger("idor", self.idor_log_path)
94 # return the logger
95 return self.idor_logger
97 def _get_logger(self, name: str, file_path: str | Path) -> logging.Logger:
98 """Gets a logger with the given name, file path, and level. Creates any required directories
100 Args:
101 name (str): The name of the logger
102 file_path (str): The file path of the logged file
104 Returns:
105 logging.Logger: The logger returned
106 """
107 # create directories if they don't exist
108 formatter = logging.Formatter("[%(levelname)s][%(asctime)s][%(name)s]:%(message)s", datefmt="%Y-%m-%d %H:%M:%S")
109 handler = logging.FileHandler(file_path)
110 handler.setFormatter(formatter)
112 logger = logging.getLogger(name)
113 if config.DEBUG:
114 logger.setLevel(logging.DEBUG)
115 else:
116 logger.setLevel(logging.INFO)
117 logger.addHandler(handler)
119 return logger