diff --git a/rad/views.py b/rad/views.py index ae163dd6..5d7476eb 100644 --- a/rad/views.py +++ b/rad/views.py @@ -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, }, ) diff --git a/templates/logs_viewer.html b/templates/logs_viewer.html index e15cdd2c..98fd4ba6 100644 --- a/templates/logs_viewer.html +++ b/templates/logs_viewer.html @@ -70,6 +70,14 @@ {% endfor %} +