Class: Lorekeeper::JSONLogger
Overview
The JSONLogger provides a logger which will output messages in JSON format
Constant Summary
Constants inherited
from FastLogger
FastLogger::LOGGING_METHODS, FastLogger::METHOD_SEVERITY_MAP, FastLogger::SEVERITY_NAMES_MAP
Instance Attribute Summary
Attributes inherited from FastLogger
#formatter
Instance Method Summary
collapse
Methods inherited from FastLogger
#add, #coerce, #debug?, #error?, #fatal?, #info?, #level, #level=, #silence, #silence_logger, #warn?, #with_level
Constructor Details
Returns a new instance of JSONLogger.
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/lorekeeper/json_logger.rb', line 9
def initialize(file)
reset_state
@base_fields = { TIMESTAMP => '', MESSAGE => '', LEVEL => '' }
@backtrace_cleaner = set_backtrace_cleaner
@rails_root = defined?(Rails.root) ? Rails.root.to_s : nil
@rails_root_size = @rails_root.to_s.size
@gem_path = defined?(Gem.path) ? Gem.path : []
@denylisted_fingerprint = denylisted_fingerprint
super(file)
end
|
Instance Method Details
#add_fields(fields) ⇒ Object
59
60
61
62
|
# File 'lib/lorekeeper/json_logger.rb', line 59
def add_fields(fields)
remove_invalid_fields(fields)
state.fetch(:base_fields).merge!(fields)
end
|
#add_thread_unsafe_fields(fields) ⇒ Object
46
47
48
49
50
|
# File 'lib/lorekeeper/json_logger.rb', line 46
def add_thread_unsafe_fields(fields)
remove_invalid_fields(fields)
@base_fields.merge!(fields)
reset_state end
|
#current_fields ⇒ Object
21
22
23
|
# File 'lib/lorekeeper/json_logger.rb', line 21
def current_fields
state[:base_fields]
end
|
#exception(exception, custom_message = nil, custom_data = nil, custom_level = :error, message: nil, data: nil, level: nil) ⇒ Object
By default message comes from exception.message Optional and named parameters to overwrite message, level and add data
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/lorekeeper/json_logger.rb', line 73
def exception(exception, custom_message = nil, custom_data = nil, custom_level = :error,
message: nil, data: nil, level: nil)
param_level = level || custom_level
param_data = data || custom_data
param_message = message || custom_message
log_level = METHOD_SEVERITY_MAP[param_level] || ERROR
if exception.is_a?(Exception)
backtrace = clean_backtrace(exception.backtrace || [])
exception_fields = {
EXCEPTION => "#{exception.class}: #{exception.message}",
STACK => backtrace
}
exception_fields[DATA] = param_data if param_data
message = param_message || exception.message
(exception_fields) { log_data(log_level, message) }
else
log_data(METHOD_SEVERITY_MAP[:warn], 'Logger exception called without exception class.')
message = "#{exception.class}: #{exception.inspect} #{param_message}"
(DATA => (param_data || {})) { log_data(log_level, message) }
end
end
|
#inspect ⇒ Object
99
100
101
|
# File 'lib/lorekeeper/json_logger.rb', line 99
def inspect
"Lorekeeper JSON logger. IO: #{@file.inspect}"
end
|
#remove_fields(fields) ⇒ Object
64
65
66
67
68
|
# File 'lib/lorekeeper/json_logger.rb', line 64
def remove_fields(fields)
[*fields].each do |field|
state.fetch(:base_fields).delete(field)
end
end
|
#remove_thread_unsafe_fields(fields) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/lorekeeper/json_logger.rb', line 52
def remove_thread_unsafe_fields(fields)
[*fields].each do |field|
@base_fields.delete(field)
end
reset_state
end
|
#reset_state ⇒ Object
29
30
31
|
# File 'lib/lorekeeper/json_logger.rb', line 29
def reset_state
Thread.current[THREAD_KEY] = nil
end
|
#state ⇒ Object
25
26
27
|
# File 'lib/lorekeeper/json_logger.rb', line 25
def state
Thread.current[THREAD_KEY] ||= { base_fields: @base_fields.dup, extra_fields: {} }
end
|
#write(message) ⇒ Object
103
104
105
|
# File 'lib/lorekeeper/json_logger.rb', line 103
def write(message)
super(json_message(message) << "\n")
end
|