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
|
# File 'lib/lorekeeper/json_logger.rb', line 9
def initialize(file)
reset_state
@base_fields = { TIMESTAMP => '', MESSAGE => '', LEVEL => '' }
super(file)
end
|
Instance Method Details
#add_fields(fields) ⇒ Object
54
55
56
57
|
# File 'lib/lorekeeper/json_logger.rb', line 54
def add_fields(fields)
remove_invalid_fields(fields)
state.fetch(:base_fields).merge!(fields)
end
|
#add_thread_unsafe_fields(fields) ⇒ Object
41
42
43
44
45
|
# File 'lib/lorekeeper/json_logger.rb', line 41
def add_thread_unsafe_fields(fields)
remove_invalid_fields(fields)
@base_fields.merge!(fields)
reset_state end
|
#current_fields ⇒ Object
16
17
18
|
# File 'lib/lorekeeper/json_logger.rb', line 16
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/lorekeeper/json_logger.rb', line 68
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
94
95
96
|
# File 'lib/lorekeeper/json_logger.rb', line 94
def inspect
"Lorekeeper JSON logger. IO: #{@file.inspect}"
end
|
#remove_fields(fields) ⇒ Object
59
60
61
62
63
|
# File 'lib/lorekeeper/json_logger.rb', line 59
def remove_fields(fields)
[*fields].each do |field|
state.fetch(:base_fields).delete(field)
end
end
|
#remove_thread_unsafe_fields(fields) ⇒ Object
47
48
49
50
51
52
|
# File 'lib/lorekeeper/json_logger.rb', line 47
def remove_thread_unsafe_fields(fields)
[*fields].each do |field|
@base_fields.delete(field)
end
reset_state
end
|
#reset_state ⇒ Object
24
25
26
|
# File 'lib/lorekeeper/json_logger.rb', line 24
def reset_state
Thread.current[THREAD_KEY] = nil
end
|
#state ⇒ Object
20
21
22
|
# File 'lib/lorekeeper/json_logger.rb', line 20
def state
Thread.current[THREAD_KEY] ||= { base_fields: @base_fields.dup, extra_fields: {} }
end
|
#write(message) ⇒ Object
98
99
100
|
# File 'lib/lorekeeper/json_logger.rb', line 98
def write(message)
super(json_message(message) << "\n")
end
|