Selecto.LogSanitizer
(Selecto v0.4.5)
Copy Markdown
Sanitizes SQL queries and parameters for safe logging.
This module ensures that sensitive data from query parameters is never written to logs, while still providing useful debugging information.
Security
- Parameters are replaced with placeholders like
$1,$2, etc. - Parameter values are NEVER logged
- SQL structure is preserved for debugging purposes
- Query previews are truncated to prevent log bloat
Usage
iex> LogSanitizer.sanitize_query("SELECT * FROM users WHERE id = $1", [123])
"SELECT * FROM users WHERE id = $1 [1 param(s) redacted]"
iex> LogSanitizer.sanitize_params([1, "secret", %{key: "value"}])
"[3 param(s) redacted]"
Summary
Functions
Creates a safe log context map with sanitized values.
Sanitizes an error for logging, removing any embedded parameter values.
Returns a safe representation of parameters for logging.
Sanitizes a query string for logging, optionally with parameter count.
Functions
Creates a safe log context map with sanitized values.
Examples
iex> safe_context(query: "SELECT...", params: [1,2,3], error: %RuntimeError{})
%{query: "SELECT... [3 param(s) redacted]", error: "RuntimeError: ..."}
Sanitizes an error for logging, removing any embedded parameter values.
Examples
iex> sanitize_error(%RuntimeError{message: "error"})
"Elixir.RuntimeError: error"
Returns a safe representation of parameters for logging.
NEVER logs actual parameter values - only the count and types.
Examples
iex> sanitize_params([1, "secret", nil])
"[3 param(s): integer, binary, nil]"
iex> sanitize_params([])
"[0 params]"
Sanitizes a query string for logging, optionally with parameter count.
Returns the query with a note about redacted parameters.
Options
:max_length- Maximum length of query to include (default: 500):show_param_count- Whether to show parameter count (default: true)
Examples
iex> sanitize_query("SELECT * FROM users WHERE id = $1", [123])
"SELECT * FROM users WHERE id = $1 [1 param(s) redacted]"
iex> sanitize_query("SELECT * FROM users", [])
"SELECT * FROM users"