From 0738596e2163e6c0170811f876d98bae234334da Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:08:40 -0400 Subject: [PATCH 1/6] feat: adding logging configuration file --- logging.cfg | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 logging.cfg diff --git a/logging.cfg b/logging.cfg new file mode 100644 index 0000000000..1c64bd2891 --- /dev/null +++ b/logging.cfg @@ -0,0 +1,65 @@ +[logger_root] +handlers=stdout,file +level=NOTSET + +[logger_cartography.cli] +qualname=cartography.cli +handlers=stdout,file +# stop duplicate log massage +propagate=0 +level=DEBUG + +[logger_cartography.sync] +qualname=cartography.sync +handlers=stdout,file +# stop duplicate log massage +propagate=0 + +[logger_botocore] +qualname=botocore +level=WARNING +handlers=stdout,file + +[logger_googleapiclient] +qualname=googleapiclient +level=WARNING +handlers=stdout,file + +[logger_neo4j] +qualname=neo4j +handlers=stdout,file +level=WARNING + +### Loggers ### +[loggers] +keys=root,cartography.cli,cartography.sync,neo4j,botocore,googleapiclient + + +### Formatters ### +[formatters] +keys=simple,detailed + +[formatter_simple] +format=%(asctime)s - %(name)s - %(levelname)s - %(message)s + +[formatter_detailed] +format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s + + +### Handlers ### +[handlers] +keys=file,stdout + +[handler_file] +class=handlers.TimedRotatingFileHandler +interval=midnight +backupCount=5 +formatter=detailed +args=('logs/cartography.log',) +level=DEBUG + +[handler_stdout] +class=StreamHandler +args=(sys.stdout,) +formatter=simple +level=INFO \ No newline at end of file From f50f27adbbd09b1c07f510bfd9a8ed58e0d8d4bc Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:14:38 -0400 Subject: [PATCH 2/6] feat: adding logging config parameter --- cartography/cli.py | 9 +++++++++ cartography/config.py | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/cartography/cli.py b/cartography/cli.py index 95c12a64d7..5ee4fa35a6 100644 --- a/cartography/cli.py +++ b/cartography/cli.py @@ -1,6 +1,7 @@ import argparse import getpass import logging +import logging.config import os import sys from typing import Optional @@ -111,6 +112,14 @@ def _build_parser(self): 'See https://neo4j.com/docs/api/python-driver/4.4/api.html#database.' ), ) + parser.add_argument( + '--logging-config', + type=str, + default=None, + help=( + 'Path to file containing Python logging configuration' + ), + ) parser.add_argument( '--selected-modules', type=str, diff --git a/cartography/config.py b/cartography/config.py index 5ea9cee002..d12858c752 100644 --- a/cartography/config.py +++ b/cartography/config.py @@ -19,6 +19,8 @@ class Config: :param neo4j_database: The name of the database in Neo4j to connect to. If not specified, uses your Neo4j database settings to infer which database is set to default. See https://neo4j.com/docs/api/python-driver/4.4/api.html#database. Optional. + :type logging_config: str + :param logging_config: Path to the file containing logging configuration. :type selected_modules: str :param selected_modules: Comma-separated list of cartography top-level modules to sync. Optional. :type update_tag: int @@ -120,6 +122,7 @@ def __init__( neo4j_password=None, neo4j_max_connection_lifetime=None, neo4j_database=None, + logging_config=None, selected_modules=None, update_tag=None, aws_sync_all_profiles=False, @@ -176,6 +179,7 @@ def __init__( self.neo4j_password = neo4j_password self.neo4j_max_connection_lifetime = neo4j_max_connection_lifetime self.neo4j_database = neo4j_database + self.logging_config - logging_config self.selected_modules = selected_modules self.update_tag = update_tag self.aws_sync_all_profiles = aws_sync_all_profiles From 7d3016001c4e62d4ae609114f4875cb58dd09416 Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:16:49 -0400 Subject: [PATCH 3/6] feat: use logging config from file --- cartography/cli.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cartography/cli.py b/cartography/cli.py index 5ee4fa35a6..9ef398de15 100644 --- a/cartography/cli.py +++ b/cartography/cli.py @@ -562,6 +562,9 @@ def main(self, argv: str) -> int: # TODO support parameter lookup in environment variables if not present on command line config: argparse.Namespace = self.parser.parse_args(argv) # Logging config + if config.logging_config: + logging.config.fileConfig(config.logging_config) + logger.info("Using logging config from %s", config.logging_config) if config.verbose: logging.getLogger('cartography').setLevel(logging.DEBUG) elif config.quiet: From 5503f4b9855cc23841b527152a0bba37208aee8d Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:17:28 -0400 Subject: [PATCH 4/6] refactor: moved to logging config file --- cartography/cli.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cartography/cli.py b/cartography/cli.py index 9ef398de15..c999a11a67 100644 --- a/cartography/cli.py +++ b/cartography/cli.py @@ -772,9 +772,5 @@ def main(argv=None): :rtype: int :return: The return code. """ - logging.basicConfig(level=logging.INFO) - logging.getLogger('botocore').setLevel(logging.WARNING) - logging.getLogger('googleapiclient').setLevel(logging.WARNING) - logging.getLogger('neo4j').setLevel(logging.WARNING) argv = argv if argv is not None else sys.argv[1:] sys.exit(CLI(prog='cartography').main(argv)) From 668afd689adaf259147cbab0462862977ccbf605 Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:25:40 -0400 Subject: [PATCH 5/6] fix: typo --- cartography/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cartography/config.py b/cartography/config.py index d12858c752..f0bcaf9028 100644 --- a/cartography/config.py +++ b/cartography/config.py @@ -179,7 +179,7 @@ def __init__( self.neo4j_password = neo4j_password self.neo4j_max_connection_lifetime = neo4j_max_connection_lifetime self.neo4j_database = neo4j_database - self.logging_config - logging_config + self.logging_config = logging_config self.selected_modules = selected_modules self.update_tag = update_tag self.aws_sync_all_profiles = aws_sync_all_profiles From ea878737ff4ac6c9dd4e5fc4fd6623373b2d09a5 Mon Sep 17 00:00:00 2001 From: chandanchowdhury Date: Wed, 1 May 2024 15:27:03 -0400 Subject: [PATCH 6/6] refactor: lint --- cartography/cli.py | 1 - logging.cfg | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cartography/cli.py b/cartography/cli.py index c999a11a67..5ebc0e37c0 100644 --- a/cartography/cli.py +++ b/cartography/cli.py @@ -1,6 +1,5 @@ import argparse import getpass -import logging import logging.config import os import sys diff --git a/logging.cfg b/logging.cfg index 1c64bd2891..b4cbbe7904 100644 --- a/logging.cfg +++ b/logging.cfg @@ -62,4 +62,4 @@ level=DEBUG class=StreamHandler args=(sys.stdout,) formatter=simple -level=INFO \ No newline at end of file +level=INFO