1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
|
# -*- encoding: utf-8 -*-
require 'logger' # use the standard Ruby logger .....
# == Example STOMP call back logger class.
#
# Optional callback methods:
#
# * on_connecting: connection starting
# * on_connected: successful connect
# * on_connectfail: unsuccessful connect (will usually be retried)
# * on_disconnect: successful disconnect
#
# * on_miscerr: on miscellaneous transmit/receive errors
#
# * on_publish: publish called
# * on_subscribe: subscribe called
# * on_unsubscribe: unsubscribe called
#
# * on_begin: begin called
# * on_ack: ack called
# * on_nack: nack called
# * on_commit: commit called
# * on_abort: abort called
#
# * on_receive: receive called and successful
#
# * on_ssl_connecting: SSL connection starting
# * on_ssl_connected: successful SSL connect
# * on_ssl_connectfail: unsuccessful SSL connect (will usually be retried)
#
# * on_hbread_fail: unsuccessful Heartbeat read
# * on_hbwrite_fail: unsuccessful Heartbeat write
# * on_hbfire: on any send or receive heartbeat
#
# All methods are optional, at the user's requirements.
#
# If a method is not provided, it is not called (of course.)
#
# IMPORTANT NOTE: in general, call back logging methods *SHOULD* not raise exceptions,
# otherwise the underlying STOMP connection may fail in mysterious ways.
#
# There are two useful exceptions to this rule for:
#
# * on_connectfail
# * on_ssl_connectfail
#
# These two methods can raise a Stomp::Errors::LoggerConnectionError. If this
# exception is raised, it is passed up the chain to the caller.
#
# Callback parameters: are a copy of the @parameters instance variable for
# the Stomp::Connection.
#
# A logger class may optionally inherit from the provided NullLogger
#
# # class Slogger < Stomp::NullLogger
#
class Slogger
# Initialize a new callback logger instance.
def initialize(init_parms = nil)
_init
@log.info("Logger initialization complete.")
end
def _init
@log = Logger::new(STDOUT) # User preference
@log.level = Logger::DEBUG # User preference
@maxml = 100
end
# Log connecting events
def on_connecting(parms)
begin
@log.debug "Connecting: #{info(parms)}"
rescue
@log.debug "Connecting oops"
end
end
# Log connected events
def on_connected(parms)
begin
@log.debug "Connected: #{info(parms)}"
rescue
@log.debug "Connected oops"
end
end
# Log connectfail events
def on_connectfail(parms)
begin
@log.debug "Connect Fail #{info(parms)}"
@log.debug parms
@log.debug "Connect Fail Socket status: #{parms[:openstat]}"
if parms[:cur_failure]
@log.debug "Connect Fail Error Message: #{parms[:cur_failure].message}"
btr = parms[:cur_failure].backtrace.join("\n")
@log.debug "Backtrace CF: #{btr}"
end
rescue
@log.debug "Connect Fail oops"
end
=begin
rescue
# An example LoggerConnectionError raise
@log.debug "Connect Fail, will raise"
raise Stomp::Error::LoggerConnectionError.new("quit from connect fail")
end
=end
end
# Log disconnect events
def on_disconnect(parms)
begin
@log.debug "Disconnected #{info(parms)}"
rescue
@log.debug "Disconnected oops"
end
end
# Log miscellaneous errors
def on_miscerr(parms, errstr)
begin
@log.debug "Miscellaneous Error #{info(parms)}"
@log.debug "Miscellaneous Error String #{errstr}"
@log.debug "Miscellaneous Error All Parms #{parms.inspect}"
if parms[:ssl_exception]
@log.debug "SSL Miscellaneous Error Parms: #{parms[:ssl_exception]}"
@log.debug "SSL Miscellaneous Error Message: #{parms[:ssl_exception].message}"
btr = parms[:ssl_execption].backtrace.join("\n")
@log.debug "Backtrace SME: #{btr}"
end
if parms[:cur_failure]
@log.debug "SSL Miscellaneous Error Parms2: #{parms[:cur_failure]}"
@log.debug "SSL Miscellaneous Error Message2: #{parms[:cur_failure].message}"
btr = parms[:cur_failure].backtrace.join("\n")
@log.debug "Backtrace SME2: #{btr}"
end
rescue
@log.debug "Miscellaneous Error oops"
end
end
# Log Subscribe
def on_subscribe(parms, headers)
begin
@log.debug "Subscribe Parms #{info(parms)}"
@log.debug "Subscribe Headers #{headers}"
rescue
@log.debug "Subscribe oops"
end
end
# Log UnSubscribe
def on_unsubscribe(parms, headers)
begin
@log.debug "UnSubscribe Parms #{info(parms)}"
@log.debug "UnSubscribe Headers #{headers}"
rescue
@log.debug "UnSubscribe oops"
end
end
# Log Publish
def on_publish(parms, message, headers)
begin
@log.debug "Publish Parms #{info(parms)}"
@log.debug "Publish Message #{message}"
@log.debug "Publish Headers #{headers}"
rescue
@log.debug "Publish oops"
end
end
# Log Receive
def on_receive(parms, result)
begin
@log.debug "Receive Message, Command: #{result.command}"
pl = result.body.length < @maxml ? result.body.length : @maxml
@log.debug "Receive Message, Body: #{result.body[0..pl]}"
@log.debug "Receive Message, Headers: #{result.headers}"
rescue
@log.debug "Receive oops"
end
end
# Log Begin
def on_begin(parms, headers)
begin
@log.debug "Begin Parms #{info(parms)}"
@log.debug "Begin Result #{headers}"
rescue
@log.debug "Begin oops"
end
end
# Log Ack
def on_ack(parms, headers)
begin
@log.debug "Ack Parms #{info(parms)}"
@log.debug "Ack Result #{headers}"
rescue
@log.debug "Ack oops"
end
end
# Log NAck
def on_nack(parms, headers)
begin
@log.debug "NAck Parms #{info(parms)}"
@log.debug "NAck Result #{headers}"
rescue
@log.debug "NAck oops"
end
end
# Log Commit
def on_commit(parms, headers)
begin
@log.debug "Commit Parms #{info(parms)}"
@log.debug "Commit Result #{headers}"
rescue
@log.debug "Commit oops"
end
end
# Log Abort
def on_abort(parms, headers)
begin
@log.debug "Abort Parms #{info(parms)}"
@log.debug "Abort Result #{headers}"
rescue
@log.debug "Abort oops"
end
end
# Stomp 1.1+ - heart beat read (receive) failed.
def on_hbread_fail(parms, ticker_data = {})
begin
@log.debug "Hbreadf Parms #{info(parms)}"
@log.debug "Hbreadf Result #{ticker_data.inspect}"
rescue
@log.debug "Hbreadf oops"
end
end
# Stomp 1.1+ - heart beat send (transmit) failed.
def on_hbwrite_fail(parms, ticker_data = {})
begin
@log.debug "Hbwritef Parms #{info(parms)}"
@log.debug "Hbwritef Result #{ticker_data.inspect}"
rescue
@log.debug "Hbwritef oops"
end
end
# Log SSL connection start.
def on_ssl_connecting(parms)
begin
@log.debug "SSL Connecting Parms #{info(parms)}"
rescue
@log.debug "SSL Connecting oops"
end
end
# Log a successful SSL connect.
def on_ssl_connected(parms)
begin
@log.debug "SSL Connected Parms #{info(parms)}"
rescue
@log.debug "SSL Connected oops"
end
end
# Log an unsuccessful SSL connect.
def on_ssl_connectfail(parms)
begin
@log.debug "SSL Connect Fail Parms #{info(parms)}"
if parms[:ssl_exception]
@log.debug "SSL Connect Fail Exception Parms: #{parms[:ssl_exception]}"
@log.debug "SSL Connect Fail Message: #{parms[:ssl_exception].message}"
btr = parms[:ssl_exception].backtrace.join("\n")
@log.debug "Backtrace SCF: #{btr}"
end
rescue
@log.debug "SSL Connect Fail oops"
end
=begin
# An example LoggerConnectionError raise
@log.debug "SSL Connect Fail, will raise"
raise Stomp::Error::LoggerConnectionError.new("quit from SSL connect")
=end
end
# Log heart beat fires
def on_hbfire(parms, srind, firedata = {})
begin
@log.debug "HeartBeat Fire Parms #{info(parms)}"
@log.debug "HeartBeat Fire Send/Receive #{srind}"
@log.debug "HeartBeat Fire Firedata #{firedata.inspect}"
rescue
@log.debug "HeartBeat Fire oops"
end
end
private
# Example information extract.
def info(parms)
#
# Available in the parms Hash:
# parms[:cur_host]
# parms[:cur_port]
# parms[:cur_login]
# parms[:cur_passcode]
# parms[:cur_ssl]
# parms[:cur_recondelay]
# parms[:cur_parseto]
# parms[:cur_conattempts]
# parms[:openstat]
#
# For the on_ssl_connectfail callback these are also available:
# parms[:ssl_exception]
#
"Host: #{parms[:cur_host]}, Port: #{parms[:cur_port]}, Login: #{parms[:cur_login]}, Passcode: #{parms[:cur_passcode]}, ssl: #{parms[:cur_ssl]}"
end
end # of class
|