add event in jdbc exception log instead of statement query. because some jdbc drivers (like oracle jdbc) not implemented toString() method in PreparedStatement class and it print java object hashcode instead of actual query. but in some jdbc implemention like postgresql and mysql and ... this has no problem

This commit is contained in:
Your Name 2017-10-23 11:24:28 +03:30
parent 079c3a6c78
commit daebe44f32

View File

@ -208,16 +208,14 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
end end
events.each do |event| events.each do |event|
query = nil
begin begin
statement = connection.prepareStatement( statement = connection.prepareStatement(
(@unsafe_statement == true) ? event.sprintf(@statement[0]) : @statement[0] (@unsafe_statement == true) ? event.sprintf(@statement[0]) : @statement[0]
) )
statement = add_statement_event_params(statement, event) if @statement.length > 1 statement = add_statement_event_params(statement, event) if @statement.length > 1
query = statement.toString
statement.execute statement.execute
rescue => e rescue => e
if retry_exception?(e, query) if retry_exception?(e, event.to_json())
events_to_retry.push(event) events_to_retry.push(event)
end end
ensure ensure
@ -308,16 +306,21 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
statement statement
end end
def retry_exception?(exception, query) def retry_exception?(exception, event)
retrying = (exception.respond_to? 'getSQLState' and (RETRYABLE_SQLSTATE_CLASSES.include?(exception.getSQLState.to_s[0,2]) or @retry_sql_states.include?(exception.getSQLState))) retrying = (exception.respond_to? 'getSQLState' and (RETRYABLE_SQLSTATE_CLASSES.include?(exception.getSQLState.to_s[0,2]) or @retry_sql_states.include?(exception.getSQLState)))
log_jdbc_exception(exception, retrying, query) log_jdbc_exception(exception, retrying, event)
retrying retrying
end end
def log_jdbc_exception(exception, retrying, query) def log_jdbc_exception(exception, retrying, event)
current_exception = exception current_exception = exception
log_text = 'JDBC - Exception. ' + (retrying ? 'Retrying' : 'Not retrying') + '.' + ' with query: "' + query + '".' log_text = 'JDBC - Exception. ' + (retrying ? 'Retrying' : 'Not retrying') + '.'
if(event != nil)
log_text += ' event: "' + event + '".'
end
log_method = (retrying ? 'warn' : 'error') log_method = (retrying ? 'warn' : 'error')
loop do loop do