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, #level
Instance Method Summary
collapse
Methods inherited from FastLogger
#add, #debug?, #error?, #fatal?, #info?, #silence, #silence_logger, #warn?
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 => '' }
@backtrace_cleaner = set_backtrace_cleaner
super(file)
end
|
Instance Method Details
#add_fields(fields) ⇒ Object
53
54
55
56
|
# File 'lib/lorekeeper/json_logger.rb', line 53
def add_fields(fields)
remove_invalid_fields(fields)
state.fetch(:base_fields).merge!(fields)
end
|
#add_thread_unsafe_fields(fields) ⇒ Object
40
41
42
43
44
|
# File 'lib/lorekeeper/json_logger.rb', line 40
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/lorekeeper/json_logger.rb', line 67
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
93
94
95
|
# File 'lib/lorekeeper/json_logger.rb', line 93
def inspect
"Lorekeeper JSON logger. IO: #{@file.inspect}"
end
|
#remove_fields(fields) ⇒ Object
58
59
60
61
62
|
# File 'lib/lorekeeper/json_logger.rb', line 58
def remove_fields(fields)
[*fields].each do |field|
state.fetch(:base_fields).delete(field)
end
end
|
#remove_thread_unsafe_fields(fields) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/lorekeeper/json_logger.rb', line 46
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
97
98
99
|
# File 'lib/lorekeeper/json_logger.rb', line 97
def write(message)
super(Oj.dump(message, mode: :compat, cache_keys: true, cache_str: 5) << "\n")
end
|