Skip to content

Instantly share code, notes, and snippets.

@tobstarr
Created July 19, 2013 15:26
Show Gist options
  • Save tobstarr/6039981 to your computer and use it in GitHub Desktop.
Save tobstarr/6039981 to your computer and use it in GitHub Desktop.
require "socket"
require "time"
require "syslog/logger"
module Syslog
class UDPLogger < Logger
attr_reader :socket
def initialize(tag, host = "127.0.0.1", port = 514)
@host = host
@port = port
@tag = tag
@level = ::Logger::DEBUG
@formatter = Formatter.new
@socket = UDPSocket.new
end
private
def add(severity, message = nil, progname = nil, &block)
severity ||= ::Logger::UNKNOWN
if @level <= severity
level = LEVEL_MAP[severity]
message = formatter.call(severity, Time.now, progname, (message || block.call))
socket.send("<1#{level}>#{syslog_time} #{hostname} #{@tag}[#{Process.pid}]: #{message}", 0, @host, @port)
end
true
end
def hostname
@hostname ||= Kernel.send(:`, "hostname").strip
end
def syslog_time
now.utc.iso8601(6).gsub(/Z$/, "+00:00") # just did not know how to get zone +00:00 with ruby
end
def now
Time.now
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment