feat: Add option to include template debug noise in logs view
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -251,6 +251,7 @@ def logs_view(request):
|
|||||||
level_filter = request.GET.get("level", "").strip().upper()
|
level_filter = request.GET.get("level", "").strip().upper()
|
||||||
show_all = request.GET.get("all") == "1"
|
show_all = request.GET.get("all") == "1"
|
||||||
raw_mode = request.GET.get("raw") == "1"
|
raw_mode = request.GET.get("raw") == "1"
|
||||||
|
include_noise = request.GET.get("include_noise") == "1"
|
||||||
|
|
||||||
if raw_mode:
|
if raw_mode:
|
||||||
if not os.path.exists(log_file_path):
|
if not os.path.exists(log_file_path):
|
||||||
@@ -352,7 +353,22 @@ def logs_view(request):
|
|||||||
|
|
||||||
filtered_entries = []
|
filtered_entries = []
|
||||||
search_lower = search_query.lower()
|
search_lower = search_query.lower()
|
||||||
|
noise_suppressed = 0
|
||||||
for entry in parsed_entries:
|
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:
|
if level_filter and entry["level"] != level_filter:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -387,6 +403,8 @@ def logs_view(request):
|
|||||||
"show_all": show_all,
|
"show_all": show_all,
|
||||||
"limit": limit,
|
"limit": limit,
|
||||||
"raw_url": f"{reverse('logs_view')}?raw=1",
|
"raw_url": f"{reverse('logs_view')}?raw=1",
|
||||||
|
"include_noise": include_noise,
|
||||||
|
"noise_suppressed": noise_suppressed,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,14 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</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">
|
<div class="col-12 col-md-auto">
|
||||||
<button type="submit" class="btn btn-primary">Search</button>
|
<button type="submit" class="btn btn-primary">Search</button>
|
||||||
{% if search_query or level_filter %}
|
{% if search_query or level_filter %}
|
||||||
@@ -78,9 +86,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-auto">
|
<div class="col-12 col-md-auto">
|
||||||
{% if show_all %}
|
{% 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 %}
|
{% 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 %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-auto">
|
<div class="col-12 col-md-auto">
|
||||||
@@ -137,12 +145,16 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
Displaying most recent 500 entries (newest first).
|
Displaying most recent 500 entries (newest first).
|
||||||
{% if total_entries > 500 %}
|
{% 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 %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if search_query %}
|
{% if search_query %}
|
||||||
Search found {{ entries|length }} matching entr{{ entries|length|pluralize:"y,ies" }}.
|
Search found {{ entries|length }} matching entr{{ entries|length|pluralize:"y,ies" }}.
|
||||||
{% endif %}
|
{% 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>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="alert alert-info">
|
<div class="alert alert-info">
|
||||||
|
|||||||
Reference in New Issue
Block a user