Class: Lorekeeper::FastLogger
- Inherits:
-
Object
- Object
- Lorekeeper::FastLogger
- Includes:
- Logger::Severity
- Defined in:
- lib/lorekeeper/fast_logger.rb
Overview
Very simple, very fast logger
Direct Known Subclasses
Constant Summary collapse
- LOGGING_METHODS =
i[ debug info warn error fatal ].freeze
- METHOD_SEVERITY_MAP =
{ debug: DEBUG, info: INFO, warn: WARN, error: ERROR, fatal: FATAL }.freeze
- SEVERITY_NAMES_MAP =
{ DEBUG => 'debug', INFO => 'info', WARN => 'warning', ERROR => 'error', FATAL => 'fatal' }.freeze
Instance Attribute Summary collapse
-
#formatter ⇒ Object
Just for compatibility with Logger, not used.
Instance Method Summary collapse
-
#add(severity, message_param = nil, progname = nil, &block) ⇒ Object
This is part of the standard Logger API, we need this to be compatible.
- #coerce(severity) ⇒ Object
- #debug? ⇒ Boolean
- #error? ⇒ Boolean
- #fatal? ⇒ Boolean
- #info? ⇒ Boolean
-
#initialize(file) ⇒ FastLogger
constructor
A new instance of FastLogger.
- #level ⇒ Object
- #level=(severity) ⇒ Object
-
#log_data(_severity, message) ⇒ Object
inherited classes probably want to reimplement this.
-
#silence(&block) ⇒ Object
activerecord-session_store v2 is now simply calling silence instead of silence_logger.
-
#silence_logger(&block) ⇒ Object
Some gems like to add this method.
- #warn? ⇒ Boolean
- #with_level(severity) ⇒ Object
- #write(message) ⇒ Object
Constructor Details
#initialize(file) ⇒ FastLogger
Returns a new instance of FastLogger.
18 19 20 21 22 23 |
# File 'lib/lorekeeper/fast_logger.rb', line 18 def initialize(file) @level = DEBUG @iodevice = LogDevice.new(file) @file = file # We only keep this so we can inspect where we are sending the logs @level_override = {} end |
Instance Attribute Details
#formatter ⇒ Object
Just for compatibility with Logger, not used
10 11 12 |
# File 'lib/lorekeeper/fast_logger.rb', line 10 def formatter @formatter end |
Instance Method Details
#add(severity, message_param = nil, progname = nil, &block) ⇒ Object
This is part of the standard Logger API, we need this to be compatible
80 81 82 83 84 85 |
# File 'lib/lorekeeper/fast_logger.rb', line 80 def add(severity, = nil, progname = nil, &block) return true if severity < level = block&.call || || progname log_data(severity, .freeze) end |
#coerce(severity) ⇒ Object
109 110 111 112 113 |
# File 'lib/lorekeeper/fast_logger.rb', line 109 def coerce(severity) return severity if severity.is_a?(Integer) METHOD_SEVERITY_MAP[severity] || raise(ArgumentError, "invalid log level: #{severity}") end |
#debug? ⇒ Boolean
12 |
# File 'lib/lorekeeper/fast_logger.rb', line 12 def debug?; level <= DEBUG; end |
#error? ⇒ Boolean
15 |
# File 'lib/lorekeeper/fast_logger.rb', line 15 def error?; level <= ERROR; end |
#fatal? ⇒ Boolean
16 |
# File 'lib/lorekeeper/fast_logger.rb', line 16 def fatal?; level <= FATAL; end |
#info? ⇒ Boolean
13 |
# File 'lib/lorekeeper/fast_logger.rb', line 13 def info?; level <= INFO; end |
#level ⇒ Object
25 26 27 |
# File 'lib/lorekeeper/fast_logger.rb', line 25 def level @level_override[Fiber.current] || @level end |
#level=(severity) ⇒ Object
29 30 31 |
# File 'lib/lorekeeper/fast_logger.rb', line 29 def level=(severity) @level = coerce(severity) end |
#log_data(_severity, message) ⇒ Object
inherited classes probably want to reimplement this
101 102 103 |
# File 'lib/lorekeeper/fast_logger.rb', line 101 def log_data(_severity, ) write() end |
#silence(&block) ⇒ Object
activerecord-session_store v2 is now simply calling silence instead of silence_logger
96 97 98 |
# File 'lib/lorekeeper/fast_logger.rb', line 96 def silence(&block) yield if block end |
#silence_logger(&block) ⇒ Object
Some gems like to add this method. For instance: github.com/rails/activerecord-session_store To avoid needing to monkey-patch Lorekeeper just to get this method, we are adding a simple non-functional version here.
91 92 93 |
# File 'lib/lorekeeper/fast_logger.rb', line 91 def silence_logger(&block) yield if block end |
#warn? ⇒ Boolean
14 |
# File 'lib/lorekeeper/fast_logger.rb', line 14 def warn?; level <= WARN; end |
#with_level(severity) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/lorekeeper/fast_logger.rb', line 33 def with_level(severity) prev = level @level_override[Fiber.current] = coerce(severity) begin yield ensure if prev @level_override[Fiber.current] = prev else @level_override.delete(Fiber.current) end end end |
#write(message) ⇒ Object
105 106 107 |
# File 'lib/lorekeeper/fast_logger.rb', line 105 def write() @iodevice.write() end |