Class: KeySloth::Logger
- Inherits:
-
Object
- Object
- KeySloth::Logger
- Defined in:
- lib/keysloth/logger.rb
Overview
Класс для многоуровневого логирования KeySloth
Обеспечивает логирование с различными уровнями детализации:
- ERROR: только критические ошибки
- INFO: основная информация о процессе (по умолчанию)
- DEBUG: подробная отладочная информация
Instance Method Summary collapse
-
#audit(operation, details = {}) ⇒ Object
Аудит логирование для операций безопасности.
-
#debug(message) ⇒ Object
Логирование отладочных сообщений.
-
#error(message, exception = nil) ⇒ Object
Логирование ошибок.
-
#info(message) ⇒ Object
Логирование информационных сообщений.
-
#initialize(level: :info, output: $stdout) ⇒ Logger
constructor
Инициализация логгера.
-
#level ⇒ Integer
Возвращает текущий уровень логирования.
-
#level=(level) ⇒ Object
Изменяет уровень логирования.
-
#security_log(operation, result, duration: nil, details: {}) ⇒ Object
Логирование операций безопасности с метриками.
-
#warn(message) ⇒ Object
Логирование предупреждений.
Constructor Details
#initialize(level: :info, output: $stdout) ⇒ Logger
Инициализация логгера
26 27 28 29 30 31 32 |
# File 'lib/keysloth/logger.rb', line 26 def initialize(level: :info, output: $stdout) @logger = ::Logger.new(output) @logger.level = log_level_constant(level) @logger.formatter = proc do |severity, datetime, _progname, msg| "[#{datetime.strftime('%Y-%m-%d %H:%M:%S')}] #{severity}: #{msg}\n" end end |
Instance Method Details
#audit(operation, details = {}) ⇒ Object
Аудит логирование для операций безопасности
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/keysloth/logger.rb', line 86 def audit(operation, details = {}) = Time.now.utc.strftime('%Y-%m-%d %H:%M:%S UTC') = "[AUDIT] #{} | Operation: #{operation}" # Добавляем детали если они есть unless details.empty? details_str = details.map { |k, v| "#{k}=#{sanitize_log_value(v, k)}" }.join(', ') += " | #{details_str}" end @logger.info() end |
#debug(message) ⇒ Object
Логирование отладочных сообщений
44 45 46 |
# File 'lib/keysloth/logger.rb', line 44 def debug() @logger.debug() end |
#error(message, exception = nil) ⇒ Object
Логирование ошибок
59 60 61 62 63 64 65 66 |
# File 'lib/keysloth/logger.rb', line 59 def error(, exception = nil) if exception @logger.error("#{}: #{exception.}") @logger.debug("Backtrace: #{exception.backtrace.join("\n")}") else @logger.error() end end |
#info(message) ⇒ Object
Логирование информационных сообщений
37 38 39 |
# File 'lib/keysloth/logger.rb', line 37 def info() @logger.info() end |
#level ⇒ Integer
Возвращает текущий уровень логирования
78 79 80 |
# File 'lib/keysloth/logger.rb', line 78 def level @logger.level end |
#level=(level) ⇒ Object
Изменяет уровень логирования
71 72 73 |
# File 'lib/keysloth/logger.rb', line 71 def level=(level) @logger.level = log_level_constant(level) end |
#security_log(operation, result, duration: nil, details: {}) ⇒ Object
Логирование операций безопасности с метриками
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/keysloth/logger.rb', line 106 def security_log(operation, result, duration: nil, details: {}) level_method = case result when :success then :info when :failure then :error when :warning then :warn else :info end = "[SECURITY] #{operation.upcase}: #{result.to_s.upcase}" += " (#{duration.round(2)}s)" if duration unless details.empty? details_str = details.map { |k, v| "#{k}=#{sanitize_log_value(v, k)}" }.join(', ') += " | #{details_str}" end send(level_method, ) # Дублируем критические ошибки в аудит лог audit(operation, details.merge(result: result, duration: duration)) if result == :failure end |
#warn(message) ⇒ Object
Логирование предупреждений
51 52 53 |
# File 'lib/keysloth/logger.rb', line 51 def warn() @logger.warn() end |