Skip to content

Commit 837921d

Browse files
🐛 Fix log alignment when pressing Ctrl+C to stop server (#253)
1 parent bd6e85f commit 837921d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/fastapi_cli/utils/cli.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
1212
self.toolkit = get_rich_toolkit()
1313

1414
def formatMessage(self, record: logging.LogRecord) -> str:
15-
return self.toolkit.print_as_string(record.getMessage(), tag=record.levelname)
15+
message = record.getMessage()
16+
result = self.toolkit.print_as_string(message, tag=record.levelname)
17+
# Prepend newline to fix alignment after ^C is printed by the terminal
18+
if message == "Shutting down":
19+
result = "\n" + result
20+
return result
1621

1722

1823
def get_uvicorn_log_config() -> Dict[str, Any]:

tests/test_utils_cli.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,25 @@ def test_custom_formatter() -> None:
3737
assert "200" in formatted
3838

3939

40+
def test_custom_formatter_shutdown_prepends_newline() -> None:
41+
formatter = CustomFormatter()
42+
43+
record = logging.LogRecord(
44+
name="uvicorn.error",
45+
level=logging.INFO,
46+
pathname="",
47+
lineno=0,
48+
msg="Shutting down",
49+
args=(),
50+
exc_info=None,
51+
)
52+
53+
formatted = formatter.formatMessage(record)
54+
55+
assert formatted.startswith("\n")
56+
assert "Shutting down" in formatted
57+
58+
4059
def test_log_config_does_not_disable_existing_loggers(
4160
caplog: LogCaptureFixture,
4261
) -> None:

0 commit comments

Comments
 (0)