Bases: ModelAdmin
Read-only admin interface for browsing application logs.
Provides two views:
- Cards view (default): one card per logger with error/warning badges and a color-coded timeline strip across
the selected time range.
- Table view: paginated log entries for a single logger, filterable by level and message content.
changelist_view(request, extra_context=None)
Route to the cards or table view depending on the logger_name query param.
Source code in log_panel/admin.py
| def changelist_view(
self, request: HttpRequest, extra_context: dict | None = None
) -> TemplateResponse:
"""Route to the cards or table view depending on the ``logger_name`` query param."""
backend: LogsBackend | None = conf.get_backend()
error: str | None = None
logger_name: str = request.GET.get(key="logger_name", default="")
if logger_name:
context: dict = self._log_table_context(
request, backend, logger_name, error
)
template: str = "admin/log_panel/panel/table.html"
else:
context: dict = self._logger_cards_context(request, backend, error)
template: str = "admin/log_panel/panel/cards.html"
return TemplateResponse(request, template, context)
|
get_urls()
Add a read-only full-message view for chunked log payloads.
Source code in log_panel/admin.py
| def get_urls(self) -> list:
"""Add a read-only full-message view for chunked log payloads."""
return [
path(
"<path:object_id>/message/",
self.admin_site.admin_view(self.message_view),
name="log_panel_log_message",
),
*super().get_urls(),
]
|
message_view(request, object_id)
Render the complete log message for a single log entry.
Source code in log_panel/admin.py
| def message_view(self, request: HttpRequest, object_id: str) -> TemplateResponse:
"""Render the complete log message for a single log entry."""
log: Log = get_object_or_404(
Log.objects.prefetch_related("message_chunks"),
pk=object_id,
)
return TemplateResponse(
request,
"admin/log_panel/panel/message.html",
{
**self.admin_site.each_context(request),
"title": f"{conf.get_setting(key='TITLE')} — {log.logger_name}",
"opts": self.model._meta,
"log": log,
"log_message": log.get_full_message(),
"level_colors": conf.get_level_colors(),
},
)
|