Skip to content

Commit 83063c1

Browse files
committed
log(feat[simple-formatter]): Add clean output formatter for CLI add commands
why: CLI add/add-from-fs commands should have clean output like print() while preserving debug output for VCS operations. what: - Add SimpleLogFormatter that outputs only the message without extra formatting - Configure specific loggers for vcspull.cli.add and vcspull.cli.add_from_fs to use simple formatter - Keep DebugLogFormatter for vcspull core operations and sync commands - Prevent logger propagation to avoid duplicate output - Maintain detailed VCS operation logging for sync functionality
1 parent 3b203f1 commit 83063c1

File tree

1 file changed

+41
-10
lines changed

1 file changed

+41
-10
lines changed

src/vcspull/log.py

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,42 @@ def setup_logger(
3838
if not log:
3939
log = logging.getLogger()
4040
if not log.handlers:
41-
channel = logging.StreamHandler()
42-
channel.setFormatter(DebugLogFormatter())
43-
44-
log.setLevel(level)
45-
log.addHandler(channel)
41+
# Setup root vcspull logger with debug formatter
42+
vcspull_logger = logging.getLogger("vcspull")
43+
if not vcspull_logger.handlers:
44+
channel = logging.StreamHandler()
45+
channel.setFormatter(DebugLogFormatter())
46+
vcspull_logger.setLevel(level)
47+
vcspull_logger.addHandler(channel)
48+
vcspull_logger.propagate = False
49+
50+
# Setup simple formatter specifically for CLI add modules
51+
# These modules provide user-facing output that should be clean
52+
add_logger = logging.getLogger("vcspull.cli.add")
53+
if not add_logger.handlers:
54+
add_channel = logging.StreamHandler()
55+
add_channel.setFormatter(SimpleLogFormatter())
56+
add_logger.setLevel(level)
57+
add_logger.addHandler(add_channel)
58+
add_logger.propagate = False
59+
60+
add_fs_logger = logging.getLogger("vcspull.cli.add_from_fs")
61+
if not add_fs_logger.handlers:
62+
add_fs_channel = logging.StreamHandler()
63+
add_fs_channel.setFormatter(SimpleLogFormatter())
64+
add_fs_logger.setLevel(level)
65+
add_fs_logger.addHandler(add_fs_channel)
66+
add_fs_logger.propagate = False
4667

4768
# setup styling for repo loggers
4869
repo_logger = logging.getLogger("libvcs")
49-
channel = logging.StreamHandler()
50-
channel.setFormatter(RepoLogFormatter())
51-
channel.addFilter(RepoFilter())
52-
repo_logger.setLevel(level)
53-
repo_logger.addHandler(channel)
70+
if not repo_logger.handlers:
71+
repo_channel = logging.StreamHandler()
72+
repo_channel.setFormatter(RepoLogFormatter())
73+
repo_channel.addFilter(RepoFilter())
74+
repo_logger.setLevel(level)
75+
repo_logger.addHandler(repo_channel)
76+
repo_logger.propagate = False
5477

5578

5679
class LogFormatter(logging.Formatter):
@@ -180,6 +203,14 @@ def template(self, record: logging.LogRecord) -> str:
180203
return f"{Fore.GREEN + Style.DIM}|{record.bin_name}| {Fore.YELLOW}({record.keyword}) {Fore.RESET}" # type:ignore # noqa: E501
181204

182205

206+
class SimpleLogFormatter(logging.Formatter):
207+
"""Simple formatter that outputs only the message, like print()."""
208+
209+
def format(self, record: logging.LogRecord) -> str:
210+
"""Format log record to just return the message."""
211+
return record.getMessage()
212+
213+
183214
class RepoFilter(logging.Filter):
184215
"""Only include repo logs for this type of record."""
185216

0 commit comments

Comments
 (0)