diff --git a/code/iottb/__main__.py b/code/iottb/__main__.py index d757a1e..379a7e2 100644 --- a/code/iottb/__main__.py +++ b/code/iottb/__main__.py @@ -2,14 +2,15 @@ import argparse from os import environ from pathlib import Path - -from iottb.logger import logger +import logging from iottb.subcommands.add_device import setup_init_device_root_parser from iottb.subcommands.capture import setup_capture_parser from iottb.utils.tcpdump_utils import list_interfaces from iottb.definitions import IOTTB_HOME_ABS, ReturnCodes +from iottb.logger import setup_logging - +logger = logging.getLogger('iottbLogger.__main__') +logger.setLevel(logging.DEBUG) ###################### # Argparse setup ###################### @@ -64,9 +65,12 @@ def check_iottb_env(): def main(): if check_iottb_env() != ReturnCodes.SUCCESS: exit(ReturnCodes.ABORTED) + + logger.debug(f'Pre setup_argparse()') parser = setup_argparse() + logger.debug('Post setup_argparse().') args = parser.parse_args() - print(args) + logger.debug(f'Args parsed: {args}') if args.command: try: args.func(args) @@ -74,9 +78,15 @@ def main(): print('Received keyboard interrupt. Exiting...') exit(1) except Exception as e: + logger.debug(f'Error in main: {e}') print(f'Error: {e}') # create_capture_directory(args.device_name) if __name__ == '__main__': + setup_logging() + logger.debug("Debug level is working") + logger.info("Info level is working") + logger.warning("Warning level is working") + main() diff --git a/code/iottb/logger.py b/code/iottb/logger.py index ea6add2..cc0cdb5 100644 --- a/code/iottb/logger.py +++ b/code/iottb/logger.py @@ -1,28 +1,35 @@ import logging import sys +import os from logging.handlers import RotatingFileHandler def setup_logging(): - logger_obj = logging.getLogger('iottbLogger') - logger_obj.setLevel(logging.DEBUG) + # Ensure the logs directory exists + log_directory = 'logs' + if not os.path.exists(log_directory): + os.makedirs(log_directory) - file_handler = RotatingFileHandler('iottb.log') + # Create handlers + file_handler = RotatingFileHandler(os.path.join(log_directory, 'iottb.log'), maxBytes=1048576, backupCount=5) console_handler = logging.StreamHandler(sys.stdout) - file_handler.setLevel(logging.INFO) - console_handler.setLevel(logging.DEBUG) - + # Create formatters and add it to handlers file_fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') - console_fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s') + console_fmt = logging.Formatter( + '%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s') file_handler.setFormatter(file_fmt) console_handler.setFormatter(console_fmt) - logger_obj.addHandler(file_handler) - logger_obj.addHandler(console_handler) + # Get the root logger and add handlers + root_logger = logging.getLogger() + root_logger.setLevel(logging.DEBUG) + root_logger.addHandler(file_handler) + root_logger.addHandler(console_handler) - return logger_obj + # Prevent propagation to the root logger to avoid duplicate logs + root_logger.propagate = False -logger = setup_logging() +setup_logging() diff --git a/code/iottb/models/capture_metadata_model.py b/code/iottb/models/capture_metadata_model.py index 33584ea..9ddec56 100644 --- a/code/iottb/models/capture_metadata_model.py +++ b/code/iottb/models/capture_metadata_model.py @@ -6,7 +6,10 @@ from typing import Optional from iottb.definitions import ReturnCodes, CAPTURE_METADATA_FILE from iottb.models.device_metadata_model import DeviceMetadata -from iottb.logger import logger +import logging + +logger = logging.getLogger('iottbLogger.capture_metadata_model') +logger.setLevel(logging.DEBUG) class CaptureMetadata: diff --git a/code/iottb/models/device_metadata_model.py b/code/iottb/models/device_metadata_model.py index 359aa96..b0ea063 100644 --- a/code/iottb/models/device_metadata_model.py +++ b/code/iottb/models/device_metadata_model.py @@ -6,7 +6,10 @@ from typing import Optional, List # iottb modules from iottb.definitions import ReturnCodes, DEVICE_METADATA_FILE -from iottb.logger import logger +import logging + +logger = logging.getLogger('iottbLogger.device_metadata_model') +logger.setLevel(logging.DEBUG) # 3rd party libs IMMUTABLE_FIELDS = {'device_name', 'device_short_name', 'device_id', 'date_created'} diff --git a/code/iottb/subcommands/add_device.py b/code/iottb/subcommands/add_device.py index 14fe95b..425bb16 100644 --- a/code/iottb/subcommands/add_device.py +++ b/code/iottb/subcommands/add_device.py @@ -4,11 +4,11 @@ import pathlib from iottb import definitions from iottb.definitions import DEVICE_METADATA_FILE, ReturnCodes -from iottb.logger import logger from iottb.models.device_metadata_model import DeviceMetadata -logger.setLevel(logging.INFO) # Since module currently passes all tests - +# logger.setLevel(logging.INFO) # Since module currently passes all tests +logger = logging.getLogger('iottbLogger.add_device') +logger.setLevel(logging.INFO) def setup_init_device_root_parser(subparsers): #assert os.environ['IOTTB_HOME'] is not None, "IOTTB_HOME environment variable is not set" diff --git a/code/iottb/subcommands/capture.py b/code/iottb/subcommands/capture.py index bb6e418..46ff6e1 100644 --- a/code/iottb/subcommands/capture.py +++ b/code/iottb/subcommands/capture.py @@ -2,12 +2,14 @@ import subprocess from pathlib import Path from iottb.definitions import * -from iottb.logger import logger +import logging from iottb.models.capture_metadata_model import CaptureMetadata from iottb.models.device_metadata_model import DeviceMetadata, dir_contains_device_metadata from iottb.utils.capture_utils import get_capture_src_folder, make_capture_src_folder from iottb.utils.tcpdump_utils import check_installed +logger = logging.getLogger('iottbLogger.capture') +logger.setLevel(logging.DEBUG) def setup_capture_parser(subparsers): parser = subparsers.add_parser('sniff', help='Sniff packets with tcpdump')