Class: SemanticLogger::Formatters::JsonTrunc
- Inherits:
-
Raw
- Object
- Raw
- SemanticLogger::Formatters::JsonTrunc
- Defined in:
- lib/appydays/loggable.rb
Overview
SemanticLogger Formatter that truncates large strings in the structured log payload. If the emitted JSON log is longer than max_message_len:
-
the payload is walked,
-
any strings with a length greater than
max_string_lenare shortened usingshorten_string. Overrideshorten_stringfor custom behavior. -
any key
:stack_tracehas its array truncated. Stack traces are very large, but contain short strings. Overridetruncate_stack_tracefor custom behavior.
Instance Attribute Summary collapse
-
#max_message_len ⇒ Object
Returns the value of attribute max_message_len.
-
#max_string_len ⇒ Object
Returns the value of attribute max_string_len.
Instance Method Summary collapse
- #call(log, logger) ⇒ Object
-
#initialize(max_message_len: 1024 * 3, max_string_len: 300, **args) ⇒ JsonTrunc
constructor
A new instance of JsonTrunc.
-
#shorten_string(v) ⇒ String
Given a long string, return the truncated string.
- #trim_long_strings(v) ⇒ Object
- #truncate_at(max_message_len, max_string_len) ⇒ Object
-
#truncate_stack_trace(arr) ⇒ Array
Given a stack trace array, return the array to log.
Constructor Details
#initialize(max_message_len: 1024 * 3, max_string_len: 300, **args) ⇒ JsonTrunc
Returns a new instance of JsonTrunc.
44 45 46 47 48 |
# File 'lib/appydays/loggable.rb', line 44 def initialize(max_message_len: 1024 * 3, max_string_len: 300, **args) super(**args) = @max_string_len = max_string_len end |
Instance Attribute Details
#max_message_len ⇒ Object
Returns the value of attribute max_message_len.
42 43 44 |
# File 'lib/appydays/loggable.rb', line 42 def end |
#max_string_len ⇒ Object
Returns the value of attribute max_string_len.
42 43 44 |
# File 'lib/appydays/loggable.rb', line 42 def max_string_len @max_string_len end |
Instance Method Details
#call(log, logger) ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/appydays/loggable.rb', line 55 def call(log, logger) r = super rj = r.to_json return rj if rj.length <= rshort = self.trim_long_strings(r) return rshort.to_json end |
#shorten_string(v) ⇒ String
Given a long string, return the truncated string.
90 91 92 |
# File 'lib/appydays/loggable.rb', line 90 def shorten_string(v) return v[..@max_string_len] + "..." end |
#trim_long_strings(v) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/appydays/loggable.rb', line 63 def trim_long_strings(v) case v when Hash v.each_with_object({}) do |(hk, hv), memo| memo[hk] = if hk == :stack_trace && hv.is_a?(Array) self.truncate_stack_trace(hv) else self.trim_long_strings(hv) end end when Array v.map { |item| self.trim_long_strings(item) } when String if v.size > @max_string_len self.shorten_string(v) else v end else v end end |
#truncate_at(max_message_len, max_string_len) ⇒ Object
50 51 52 53 |
# File 'lib/appydays/loggable.rb', line 50 def truncate_at(, max_string_len) = @max_string_len = max_string_len end |
#truncate_stack_trace(arr) ⇒ Array
Given a stack trace array, return the array to log.
97 98 99 100 |
# File 'lib/appydays/loggable.rb', line 97 def truncate_stack_trace(arr) return arr if arr.length <= 4 return [arr[0], arr[1], "skipped #{arr.length - 4} frames", arr[-2], arr[-1]] end |