use custom Kemal::RequestLogHandler to filter search queries

This commit is contained in:
Fijxu 2025-08-31 17:04:46 -04:00
parent b6f164bef3
commit fdeb067636
No known key found for this signature in database
GPG Key ID: 32C1DDF333EDA6A4
2 changed files with 32 additions and 0 deletions

View File

@ -256,6 +256,9 @@ add_handler FilteredCompressHandler.new
add_handler APIHandler.new
add_handler AuthHandler.new
add_handler DenyFrame.new
# Turn off default Kemal logging since we are using our own one based on Kemal::RequestLogHandler
Kemal.config.logging = false
add_handler Invidious::RequestLogHandler.new
add_context_storage_type(Array(String))
add_context_storage_type(Preferences)
add_context_storage_type(Invidious::User)

View File

@ -44,3 +44,32 @@ module Invidious::Logger
end
end
end
class Invidious::RequestLogHandler < Kemal::RequestLogHandler
Log = ::Log.for(Kemal)
def call(context : HTTP::Server::Context)
elapsed_time = Time.measure { call_next(context) }
elapsed_text = elapsed_text(elapsed_time)
requested_url = context.request.resource
# Try not to log search queries passed as GET parameters during normal use
# (They will still be logged if log level is 'Debug' or 'Trace')
if CONFIG.log_level > ::Log::Severity::Debug && (
requested_url.downcase.includes?("search") || requested_url.downcase.includes?("q=")
)
# Log only the path
requested_url = context.request.path
end
Log.info { "#{context.response.status_code} #{context.request.method} #{requested_url} #{elapsed_text}" }
context
end
private def elapsed_text(elapsed)
millis = elapsed.total_milliseconds
return "#{millis.round(2)}ms" if millis >= 1
"#{(millis * 1000).round(2)}µs"
end
end