Selecto.LogSanitizer (Selecto v0.4.3)
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
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
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]"
Link to this section 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.
Link to this section Functions
safe_context(context)
Creates a safe log context map with sanitized values.
examples
Examples
iex> safe_context(query: "SELECT...", params: [1,2,3], error: %RuntimeError{})
%{query: "SELECT... [3 param(s) redacted]", error: "RuntimeError: ..."}
sanitize_error(error)
Sanitizes an error for logging, removing any embedded parameter values.
examples
Examples
iex> sanitize_error(%RuntimeError{message: "error"})
"Elixir.RuntimeError: error"
sanitize_params(params)
Returns a safe representation of parameters for logging.
NEVER logs actual parameter values - only the count and types.
examples
Examples
iex> sanitize_params([1, "secret", nil])
"[3 param(s): integer, binary, nil]"
iex> sanitize_params([])
"[0 params]"
sanitize_query(query, params \\ [], opts \\ [])
Sanitizes a query string for logging, optionally with parameter count.
Returns the query with a note about redacted parameters.
options
Options
:max_length- Maximum length of query to include (default: 500):show_param_count- Whether to show parameter count (default: true)
examples
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"