Formatting¶
Make logs readable with templates, or switch to JSON.
JSON for log aggregation
Use serialize=True for structured logging with Elasticsearch, Loki, etc.
Default format¶
The default log format includes caller information (module, function, line number):
Output:
This format is similar to uvicorn's log format, making it easy to identify where each log message originated.
Custom format¶
Customize the format when adding a handler:
from logust import logger
logger.add("app.log", format="{time} | {level} | {message}")
logger.add("simple.log", format="[{level}] {message}")
logger.add("minimal.log", format="{message}")
Format tokens¶
| Token | Description | Example |
|---|---|---|
{time} | Timestamp | 2025-12-24 12:00:00.123 |
{level} | Log level name | INFO |
{level:<8} | Aligned level (width 8) | INFO |
{message} | Log message | Hello, world! |
{name} | Module/logger name | __main__, myapp.utils |
{function} | Function name | process_request |
{line} | Line number | 42 |
{extra[key]} | Extra context fields | {extra[user_id]} |
Caller information¶
The {name}, {function}, and {line} tokens capture the call site:
# myapp/handler.py, line 15
def handle_request():
logger.info("Processing request")
# Output: myapp.handler:handle_request:15 - Processing request
When using opt(depth=N), caller info is adjusted to skip N frames:
def wrapper():
def inner():
logger.opt(depth=1).info("From wrapper") # Shows 'wrapper', not 'inner'
inner()
Extra fields¶
from logust import logger
user_logger = logger.bind(user_id="123", action="login")
user_logger.info("User action")
Format usage:
JSON output¶
For structured logging, use the serialize option:
logger.add("app.json", serialize=True)
def handle_login():
logger.info("User logged in")
handle_login()
Output:
{
"time": "2025-12-24 12:00:00.123",
"level": "INFO",
"message": "User logged in",
"name": "__main__",
"function": "handle_login",
"line": 5
}
Caller information is automatically included in JSON output.
JSON with context¶
When using bind(), extra fields are included:
logger.add("app.json", serialize=True)
user_logger = logger.bind(user_id="123", action="login")
user_logger.info("User action")
Output:
{
"time": "2025-12-24T12:00:00.123456",
"level": "INFO",
"message": "User action",
"extra": {
"user_id": "123",
"action": "login"
}
}
Color markup¶
Add colors to console output using markup:
from logust import logger
logger.info("<red>Error</red> in <blue>module</blue>")
logger.info("<green>Success!</green>")
logger.info("<bold>Important</bold> message")
Available tags¶
| Tag | Description |
|---|---|
<red>, <green>, <blue>, etc. | Text colors |
<bold> | Bold text |
<underline> | Underlined text |
<bright_red>, <bright_green>, etc. | Bright colors |
Note
Color markup only works in console output, not in file handlers.