Class: SemanticLogger::Appender::Udp

Inherits:
Subscriber show all
Defined in:
lib/semantic_logger/appender/udp.rb

Overview

UDP log appender.

Write log messages to UDP. By default messages are in JSON format.

Example:

SemanticLogger.add_appender(
  appender: :udp,
  server:   'server:3300',
)

Instance Attribute Summary collapse

Attributes inherited from Subscriber

#application, #formatter, #host, #logger, #metrics

Attributes inherited from Base

#filter, #name

Instance Method Summary collapse

Methods inherited from Subscriber

#level, #should_log?

Methods inherited from Base

#backtrace, #fast_tag, #level, #level=, #measure, #payload, #pop_tags, #push_tags, #should_log?, #silence, #tagged, #tags, #with_payload

Constructor Details

#initialize(server:, udp_flags: 0, metrics: true, **args, &block) ⇒ Udp

Create UDP log appender.

server: [String]
  URL of the server to write UDP messages to.

udp_flags: [Integer]
  Should be a bitwise OR of Socket::MSG_* constants.
  Default: 0

Common Appender Parameters:

application: [String]
  Name of this application to appear in log messages.
  Default: SemanticLogger.application

host: [String]
  Name of this host to appear in log messages.
  Default: SemanticLogger.host

level: [:trace | :debug | :info | :warn | :error | :fatal]
  Override the log level for this appender.
  Default: SemanticLogger.default_level

formatter: [Object|Proc]
  An instance of a class that implements #call, or a Proc to be used to format
  the output from this appender
  Default: Use the built-in formatter (See: #call)

filter: [Regexp|Proc]
  RegExp: Only include log messages where the class name matches the supplied.
  regular expression. All other messages will be ignored.
  Proc: Only include log messages where the supplied Proc returns true
        The Proc must return true or false.

metrics: [Boolean]
  Send metrics only events over udp.
  Default: true

Limitations:

Example:

SemanticLogger.add_appender(
  appender: :udp,
  server:   'server:3300'
)


64
65
66
67
68
69
70
# File 'lib/semantic_logger/appender/udp.rb', line 64

def initialize(server:, udp_flags: 0, metrics: true, **args, &block)
  @server    = server
  @udp_flags = udp_flags

  super(metrics: metrics, **args, &block)
  reopen
end

Instance Attribute Details

#serverObject

Returns the value of attribute server.



15
16
17
# File 'lib/semantic_logger/appender/udp.rb', line 15

def server
  @server
end

#socketObject (readonly)

Returns the value of attribute socket.



16
17
18
# File 'lib/semantic_logger/appender/udp.rb', line 16

def socket
  @socket
end

#udp_flagsObject

Returns the value of attribute udp_flags.



15
16
17
# File 'lib/semantic_logger/appender/udp.rb', line 15

def udp_flags
  @udp_flags
end

Instance Method Details

#closeObject

Close is called during shutdown, or with reopen



93
94
95
# File 'lib/semantic_logger/appender/udp.rb', line 93

def close
  @socket&.close
end

#flushObject

Flush is called by the semantic_logger during shutdown.



88
89
90
# File 'lib/semantic_logger/appender/udp.rb', line 88

def flush
  @socket&.flush
end

#log(log) ⇒ Object

Write the log using the specified protocol and server.



82
83
84
85
# File 'lib/semantic_logger/appender/udp.rb', line 82

def log(log)
  @socket.send(formatter.call(log, self), udp_flags)
  true
end

#reopenObject

After forking an active process call #reopen to re-open open the handles to resources



74
75
76
77
78
79
# File 'lib/semantic_logger/appender/udp.rb', line 74

def reopen
  close
  @socket    = UDPSocket.new
  host, port = server.split(':')
  @socket.connect(host, port.to_i)
end