Skip to content

Commit 30e5fda

Browse files
committed
Make logging config work with rich and uvicorn
When rich is not selected, use the uvicorn.logging.DefaultFormatter for log messages. Modify the default format slightly to include miliseconds in the timestamp.
1 parent d0b9612 commit 30e5fda

1 file changed

Lines changed: 23 additions & 25 deletions

File tree

src/log.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ def get_logger(file: str) -> logging.Logger:
6262

6363
@lru_cache
6464
def setup_logging() -> dict[t.Any, t.Any]:
65-
handler = "console"
65+
"""Create logging configuration."""
66+
handler = "default"
6667
log_level = resolve_log_level()
6768
if sys.stderr.isatty() and not os.environ.get(
6869
LIGHTSPEED_STACK_DISABLE_RICH_HANDLER_ENV_VAR
@@ -72,26 +73,12 @@ def setup_logging() -> dict[t.Any, t.Any]:
7273
logging_conf = {
7374
"version": 1,
7475
"disable_existing_loggers": False,
75-
"formatters": {
76-
# RichHandler needs format="%(message)s" to prevent double-formatting by the root Formatter.
77-
"rich": {
78-
"format": "RICH %(message)s",
79-
"datefmt": "[%X]",
80-
},
81-
"console": {
82-
"format": DEFAULT_LOG_FORMAT,
83-
"datefmt": "%Y-%m-%d %H:%M:%S",
84-
},
85-
},
8676
"handlers": {
87-
"console": {
88-
"formatter": "console",
89-
"class": "logging.StreamHandler",
90-
"stream": "ext://sys.stderr",
91-
},
9277
"rich": {
93-
"formatter": "rich",
94-
"class": "rich.logging.RichHandler",
78+
"()": "rich.logging.RichHandler",
79+
"show_time": True,
80+
"log_time_format": "%Y-%m-%d %H:%M:%S.%f",
81+
"level": log_level,
9582
},
9683
},
9784
"loggers": {
@@ -100,16 +87,27 @@ def setup_logging() -> dict[t.Any, t.Any]:
10087
"level": log_level,
10188
"propagate": False,
10289
},
90+
"llama_stack_client": {
91+
"handlers": [handler],
92+
"level": log_level,
93+
"propagate": False,
94+
},
10395
},
10496
}
10597

10698
merged_config = deep_update(uvicorn.config.LOGGING_CONFIG, logging_conf)
107-
merged_config["formatters"]["access"]["fmt"] = (
108-
'%(asctime)s.%(msecs)03d %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s'
109-
)
110-
merged_config["formatters"]["default"]["fmt"] = (
111-
"%(asctime)s.%(msecs)03d %(levelprefix)s%(message)s"
112-
)
99+
100+
if handler == "rich":
101+
merged_config["loggers"]["uvicorn"]["handlers"] = [handler]
102+
merged_config["loggers"]["uvicorn.access"]["handlers"] = [handler]
103+
else:
104+
merged_config["formatters"]["access"]["fmt"] = (
105+
"%(asctime)s.%(msecs)03d %(levelprefix)s "
106+
'%(client_addr)s - "%(request_line)s" %(status_code)s'
107+
)
108+
merged_config["formatters"]["default"]["fmt"] = DEFAULT_LOG_FORMAT
109+
merged_config["formatters"]["default"]["datefmt"] = "%Y-%m-%d %H:%M"
110+
113111
logging.config.dictConfig(merged_config)
114112

115113
return merged_config

0 commit comments

Comments
 (0)