Class: JobWorkflow::Logger::JsonFormatter

Inherits:
Logger::Formatter
  • Object
show all
Includes:
ActiveSupport::TaggedLogging::Formatter
Defined in:
lib/job_workflow/logger.rb,
sig/generated/job_workflow/logger.rbs

Overview

JSON formatter for structured logging output.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(log_tags: []) ⇒ JsonFormatter

: (?log_tags: Array) -> void

Parameters:

  • log_tags: (Array[Symbol]) (defaults to: [])


39
40
41
42
# File 'lib/job_workflow/logger.rb', line 39

def initialize(log_tags: [])
  @log_tags = log_tags
  super()
end

Instance Attribute Details

#log_tagsArray[Symbol] (readonly)

Signature:

  • Array[Symbol]

Returns:

  • (Array[Symbol])


54
55
56
# File 'lib/job_workflow/logger.rb', line 54

def log_tags
  @log_tags
end

Instance Method Details

#build_base_hash(severity, time, progname) ⇒ Hash[Symbol, untyped]

: (String, Time, String) -> Hash[Symbol, untyped]

Parameters:

  • (String)
  • (Time)
  • (String)

Returns:

  • (Hash[Symbol, untyped])


57
58
59
60
# File 'lib/job_workflow/logger.rb', line 57

def build_base_hash(severity, time, progname)
  time_in_zone = time.in_time_zone(Time.zone || "UTC")
  { time: time_in_zone.iso8601(6), level: severity, progname: progname }
end

#build_msg_hash(msg) ⇒ Hash[Symbol, untyped]

: (String | Hash[untyped, untyped]) -> Hash[Symbol, untyped]

Parameters:

  • (String, Hash[untyped, untyped])

Returns:

  • (Hash[Symbol, untyped])


68
69
70
71
72
73
74
75
# File 'lib/job_workflow/logger.rb', line 68

def build_msg_hash(msg)
  case msg
  when Hash
    msg.symbolize_keys
  else
    parse_json_or_message(msg.to_s)
  end
end

#build_tags_hashHash[Symbol, untyped]

: () -> Hash[Symbol, untyped]

Returns:

  • (Hash[Symbol, untyped])


63
64
65
# File 'lib/job_workflow/logger.rb', line 63

def build_tags_hash
  log_tags.zip(current_tags).to_h
end

#call(severity, time, progname, msg) ⇒ String

: (String, Time, String, String | Hash[untyped, untyped]) -> String

Parameters:

  • (String)
  • (Time)
  • (String)
  • (String, Hash[untyped, untyped])

Returns:

  • (String)


45
46
47
48
49
50
# File 'lib/job_workflow/logger.rb', line 45

def call(severity, time, progname, msg)
  base_hash = build_base_hash(severity, time, progname)
  tags_hash = build_tags_hash
  msg_hash = build_msg_hash(msg)
  "#{JSON.generate({ **base_hash, **tags_hash, **msg_hash })}\n"
end

#parse_json_or_message(msg) ⇒ Hash[Symbol, untyped]

: (String) -> Hash[Symbol, untyped]

Parameters:

  • (String)

Returns:

  • (Hash[Symbol, untyped])


78
79
80
81
82
# File 'lib/job_workflow/logger.rb', line 78

def parse_json_or_message(msg)
  JSON.parse(msg, symbolize_names: true)
rescue JSON::ParserError
  { message: msg }
end