Class: SemanticLogger::Appender::Udp

Inherits:
Subscriber
  • Object
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, #environment, #formatter, #host, #logger, #metrics

Instance Method Summary collapse

Methods inherited from Subscriber

#batch_by_default?, #console_output?, #console_stream, #level, #should_log?

Constructor Details

#initialize(server:, udp_flags: 0, metrics: true, **args) ⇒ 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, &)
  @server    = server
  @udp_flags = udp_flags

  super(metrics: metrics, **args, &)
  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