Class: Auth::Sanitizer::SanitizedLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/auth/sanitizer/sanitized_logger.rb

Overview

Logger wrapper that redacts sensitive values from debug output before delegating to the
underlying logger instance.

This class is intentionally narrow in scope: it only sanitizes string messages emitted
through the logging path and leaves request/response behavior unchanged.

The underlying {ThingFilter} is initialized once when the logger wrapper is
created, so later config changes do not alter the behavior of existing
logger instances.

Instance Method Summary collapse

Constructor Details

#initialize(logger, filtered_keys: Auth::Sanitizer.default_filtered_keys, label: Auth::Sanitizer.filtered_label) ⇒ SanitizedLogger

Create a new sanitized logger wrapper.

Parameters:

  • logger (#add, #debug, #info, #warn, #error, #fatal, #unknown) —

    The underlying logger instance that will receive sanitized messages.

  • filtered_keys (Array<String>) (defaults to: Auth::Sanitizer.default_filtered_keys) —

    Key names whose values should be redacted in debug output.
    Defaults to Auth::Sanitizer.default_filtered_keys.

  • label (String) (defaults to: Auth::Sanitizer.filtered_label) —

    Replacement label for redacted values.
    Defaults to Auth::Sanitizer.filtered_label.



25
26
27
28
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 25

def initialize(logger, filtered_keys: Auth::Sanitizer.default_filtered_keys, label: Auth::Sanitizer.filtered_label)
  @logger = logger
  @value_sanitizer = ValueSanitizer.new(filtered_keys: filtered_keys, label: label)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) { ... } ⇒ Object

Delegate unsupported methods to the wrapped logger.

Parameters:

  • method_name (Symbol) —

    Method to invoke

  • args (Array<Object>) —

    Method arguments

Yields:

  • Deferred block forwarded to the wrapped logger

Returns:

  • (Object) —

    The delegated result



174
175
176
177
178
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 174

def method_missing(method_name, *args, &block)
  return super unless @logger.respond_to?(method_name)

  @logger.public_send(method_name, *args, &block)
end

Instance Method Details

#<<(message) ⇒ Object

Append a message to the underlying logger after sanitization.

Parameters:

  • message (String) —

    Message to append

Returns:

  • (Object) —

    The underlying logger result



49
50
51
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 49

def <<(message)
  @logger << sanitize(message)
end

#add(severity, message = nil, progname = nil) ⇒ Object

Add a log entry after sanitizing any string payloads.

Parameters:

  • severity (Integer, Symbol, String, nil) —

    Logger severity

  • message (Object, nil) (defaults to: nil) —

    Optional log message

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



37
38
39
40
41
42
43
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 37

def add(severity, message = nil, progname = nil)
  if block_given?
    @logger.add(severity, sanitize(message), sanitize(progname)) { sanitize(yield) }
  else
    @logger.add(severity, sanitize(message), sanitize(progname))
  end
end

#close ⇒ void

This method returns an undefined value.

Close the underlying logger if supported.



110
111
112
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 110

def close
  @logger.close if @logger.respond_to?(:close)
end

#debug(progname = nil, &block) ⇒ Object

Log a debug message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



58
59
60
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 58

def debug(progname = nil, &block)
  log(:debug, progname, &block)
end

#error(progname = nil, &block) ⇒ Object

Log an error message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



85
86
87
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 85

def error(progname = nil, &block)
  log(:error, progname, &block)
end

#fatal(progname = nil, &block) ⇒ Object

Log a fatal message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



94
95
96
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 94

def fatal(progname = nil, &block)
  log(:fatal, progname, &block)
end

#formatter ⇒ Object?

Access the formatter of the underlying logger if supported.

Returns:

  • (Object, nil)


117
118
119
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 117

def formatter
  @logger.formatter if @logger.respond_to?(:formatter)
end

#formatter=(formatter) ⇒ void

This method returns an undefined value.

Set the formatter of the underlying logger if supported.

Parameters:

  • formatter (Object) —

    Formatter object



125
126
127
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 125

def formatter=(formatter)
  @logger.formatter = formatter if @logger.respond_to?(:formatter=)
end

#info(progname = nil, &block) ⇒ Object

Log an info message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



67
68
69
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 67

def info(progname = nil, &block)
  log(:info, progname, &block)
end

#level ⇒ Object?

Access the logger level if supported.

Returns:

  • (Object, nil)


132
133
134
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 132

def level
  @logger.level if @logger.respond_to?(:level)
end

#level=(level) ⇒ void

This method returns an undefined value.

Set the logger level if supported.

Parameters:

  • level (Object) —

    Logger level



140
141
142
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 140

def level=(level)
  @logger.level = level if @logger.respond_to?(:level=)
end

#progname ⇒ Object?

Access the logger progname if supported.

Returns:

  • (Object, nil)


147
148
149
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 147

def progname
  @logger.progname if @logger.respond_to?(:progname)
end

#progname=(progname) ⇒ void

This method returns an undefined value.

Set the logger progname if supported.

Parameters:

  • progname (Object) —

    Logger progname



155
156
157
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 155

def progname=(progname)
  @logger.progname = progname if @logger.respond_to?(:progname=)
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Report support for methods provided by the wrapped logger.

Parameters:

  • method_name (Symbol) —

    Method name to check

  • include_private (Boolean) (defaults to: false) —

    Whether private methods are considered

Returns:

  • (Boolean)


164
165
166
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 164

def respond_to_missing?(method_name, include_private = false)
  @logger.respond_to?(method_name, include_private) || super
end

#unknown(progname = nil, &block) ⇒ Object

Log an unknown-severity message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



103
104
105
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 103

def unknown(progname = nil, &block)
  log(:unknown, progname, &block)
end

#warn(progname = nil, &block) ⇒ Object

Log a warning message after sanitization.

Parameters:

  • progname (Object, nil) (defaults to: nil) —

    Optional program name

Yield Returns:

  • (Object) —

    Deferred log message

Returns:

  • (Object) —

    The underlying logger result



76
77
78
# File 'lib/auth/sanitizer/sanitized_logger.rb', line 76

def warn(progname = nil, &block)
  log(:warn, progname, &block)
end