feat: Add option to include template debug noise in logs view

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Ross
2026-04-29 22:47:43 +01:00
parent 9ef4b2dac1
commit 74cdf14af3
2 changed files with 33 additions and 3 deletions
+18
View File
@@ -251,6 +251,7 @@ def logs_view(request):
level_filter = request.GET.get("level", "").strip().upper()
show_all = request.GET.get("all") == "1"
raw_mode = request.GET.get("raw") == "1"
include_noise = request.GET.get("include_noise") == "1"
if raw_mode:
if not os.path.exists(log_file_path):
@@ -352,7 +353,22 @@ def logs_view(request):
filtered_entries = []
search_lower = search_query.lower()
noise_suppressed = 0
for entry in parsed_entries:
# Django template debug logs can be very noisy and usually do not indicate
# fatal issues. Hide them by default, with an explicit opt-in toggle.
is_template_debug_noise = (
entry.get("level") == "DEBUG"
and entry.get("logger") == "django.template"
and (
"Exception while resolving variable" in entry.get("message", "")
or any("VariableDoesNotExist" in d for d in entry.get("details", []))
)
)
if is_template_debug_noise and not include_noise:
noise_suppressed += 1
continue
if level_filter and entry["level"] != level_filter:
continue
@@ -387,6 +403,8 @@ def logs_view(request):
"show_all": show_all,
"limit": limit,
"raw_url": f"{reverse('logs_view')}?raw=1",
"include_noise": include_noise,
"noise_suppressed": noise_suppressed,
},
)
+15 -3
View File
@@ -70,6 +70,14 @@
{% endfor %}
</select>
</div>
<div class="col-12 col-md-2 d-flex align-items-center">
<div class="form-check mt-1">
<input class="form-check-input" type="checkbox" value="1" id="include_noise" name="include_noise" {% if include_noise %}checked{% endif %}>
<label class="form-check-label small" for="include_noise">
Include template debug noise
</label>
</div>
</div>
<div class="col-12 col-md-auto">
<button type="submit" class="btn btn-primary">Search</button>
{% if search_query or level_filter %}
@@ -78,9 +86,9 @@
</div>
<div class="col-12 col-md-auto">
{% if show_all %}
<a href="{% url 'logs_view' %}?q={{ search_query }}&level={{ level_filter }}" class="btn btn-outline-secondary">Show recent only</a>
<a href="{% url 'logs_view' %}?q={{ search_query|urlencode }}&level={{ level_filter|urlencode }}{% if include_noise %}&include_noise=1{% endif %}" class="btn btn-outline-secondary">Show recent only</a>
{% else %}
<a href="{% url 'logs_view' %}?q={{ search_query }}&level={{ level_filter }}&all=1" class="btn btn-outline-info">View all logs</a>
<a href="{% url 'logs_view' %}?q={{ search_query|urlencode }}&level={{ level_filter|urlencode }}&all=1{% if include_noise %}&include_noise=1{% endif %}" class="btn btn-outline-info">View all logs</a>
{% endif %}
</div>
<div class="col-12 col-md-auto">
@@ -137,12 +145,16 @@
{% else %}
Displaying most recent 500 entries (newest first).
{% if total_entries > 500 %}
<a href="{% url 'logs_view' %}?q={{ search_query }}&level={{ level_filter }}&all=1" class="alert-link">View all {{ total_entries }} entries</a>.
<a href="{% url 'logs_view' %}?q={{ search_query|urlencode }}&level={{ level_filter|urlencode }}&all=1{% if include_noise %}&include_noise=1{% endif %}" class="alert-link">View all {{ total_entries }} entries</a>.
{% endif %}
{% endif %}
{% if search_query %}
Search found {{ entries|length }} matching entr{{ entries|length|pluralize:"y,ies" }}.
{% endif %}
{% if noise_suppressed and not include_noise %}
Hidden {{ noise_suppressed }} noisy template debug entr{{ noise_suppressed|pluralize:"y,ies" }}.
<a href="{% url 'logs_view' %}?q={{ search_query|urlencode }}&level={{ level_filter|urlencode }}{% if show_all %}&all=1{% endif %}&include_noise=1" class="alert-link">Show them</a>.
{% endif %}
</div>
{% else %}
<div class="alert alert-info">