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.



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

def initialize(logger, filtered_keys: Auth::Sanitizer.default_filtered_keys, label: Auth::Sanitizer.filtered_label)
  @logger = logger
  @thing_filter = ThingFilter.new(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



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

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



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

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



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

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

#closevoid

This method returns an undefined value.

Close the underlying logger if supported.



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

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



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

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



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

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



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

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

#formatterObject?

Access the formatter of the underlying logger if supported.

Returns:

  • (Object, nil)


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

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



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

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



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

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

#levelObject?

Access the logger level if supported.

Returns:

  • (Object, nil)


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

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



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

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

#prognameObject?

Access the logger progname if supported.

Returns:

  • (Object, nil)


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

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



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

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)


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

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



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

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



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

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