Skip to content

Commit 0af65bd

Browse files
committed
fea: Add file handler for log output
Signed-off-by: Helio Chissini de Castro <[email protected]>
1 parent 3b60d74 commit 0af65bd

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/python_inspector/logging.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#
99

1010
import logging
11+
from pathlib import Path
1112
from types import TracebackType
1213
from typing import Any, Optional, Tuple, Type, Union
1314

@@ -75,7 +76,7 @@ def deep(
7576
logging.Logger.deep = deep
7677

7778

78-
def setup_logger(level: str = "WARNING") -> None:
79+
def setup_logger(level: str = "WARNING", log_file: Optional[Path] = None) -> None:
7980
"""
8081
Configures the logger for the 'python-inspector' application.
8182
@@ -101,6 +102,11 @@ def setup_logger(level: str = "WARNING") -> None:
101102
handler.setFormatter(formatter)
102103
_logger.addHandler(handler)
103104

105+
if log_file:
106+
file_handler = logging.FileHandler(log_file, encoding="utf-8")
107+
file_handler.setFormatter(formatter)
108+
logger.addHandler(file_handler)
109+
104110

105111
# Logger as a singleton
106112
logger: logging.Logger = logging.getLogger("python-inspector")

src/python_inspector/resolve_cli.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
# See https://aboutcode.org for more information about nexB OSS projects.
1010
#
1111

12-
from typing import Dict
12+
from pathlib import Path
13+
from typing import Dict, Optional
1314

1415
import click
1516

@@ -187,6 +188,9 @@ def print_version(ctx, param, value):
187188
help="Use generic or truncated paths in the JSON output header and files sections. "
188189
"Used only for testing to avoid absolute paths and paths changing at each run.",
189190
)
191+
@click.option(
192+
"--log-file", type=click.Path(path_type=Path), help="Write logs to a file."
193+
)
190194
def resolve_dependencies(
191195
ctx,
192196
requirement_files,
@@ -200,6 +204,7 @@ def resolve_dependencies(
200204
netrc_file,
201205
max_rounds,
202206
verbose,
207+
log_file: Optional[Path],
203208
use_cached_index=False,
204209
use_pypi_json_api=False,
205210
analyze_setup_py_insecurely=False,
@@ -240,15 +245,15 @@ def resolve_dependencies(
240245

241246
# Setup verbose level
242247
if verbose >= 4:
243-
logging.setup_logger("DEEP")
248+
logging.setup_logger("DEEP", log_file=log_file)
244249
elif verbose == 3:
245-
logging.setup_logger("TRACE")
250+
logging.setup_logger("TRACE", log_file=log_file)
246251
elif verbose == 2:
247-
logging.setup_logger("DEBUG")
252+
logging.setup_logger("DEBUG", log_file=log_file)
248253
elif verbose == 1:
249-
logging.setup_logger("INFO")
254+
logging.setup_logger("INFO", log_file=log_file)
250255
else:
251-
logging.setup_logger()
256+
logging.setup_logger(log_file=log_file)
252257

253258
options = get_pretty_options(ctx, generic_paths=generic_paths)
254259

0 commit comments

Comments
 (0)