Skip to content

Commit

Permalink
Log failed queries
Browse files Browse the repository at this point in the history
  • Loading branch information
paulcsmith committed Mar 16, 2020
1 parent 6dcbb6b commit 29a25e9
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
8 changes: 8 additions & 0 deletions spec/spec_helper.cr
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ Spec.before_each do
TestDatabase.truncate
end

# Keep log level high so we can only show failed logs in test
logger = Dexter::Logger.new(STDERR, level: Logger::Severity::FATAL)

Avram.configure do |settings|
settings.logger = logger
settings.query_failed_log_level = Logger::Severity::FATAL
end

class SampleBackupDatabase < Avram::Database
end

Expand Down
1 change: 1 addition & 0 deletions src/avram.cr
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ module Avram
setting logger : Dexter::Logger = Dexter::Logger.new(nil)
setting query_log_level : ::Logger::Severity?
setting save_failed_log_level : ::Logger::Severity? = ::Logger::Severity::WARN
setting query_failed_log_level : ::Logger::Severity? = ::Logger::Severity::ERROR
setting database_to_migrate : Avram::Database.class, example: "AppDatabase"
setting time_formats : Array(String) = [] of String
end
Expand Down
23 changes: 23 additions & 0 deletions src/avram/pool_statement_logging.cr
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,41 @@ module DB
def exec : ExecResult
log_query
statement_with_retry &.exec
rescue e : PQ::PQError
log_error
raise e
end

def exec(*args_, args : Array? = nil) : ExecResult
log_query(*args_, args: args)
statement_with_retry &.exec(*args_, args: args)
rescue e : PQ::PQError
log_error(*args_, args: args)
raise e
end

def query : ResultSet
log_query
statement_with_retry &.query
rescue e : PQ::PQError
log_error
raise e
end

def query(*args_, args : Array? = nil) : ResultSet
log_query(*args_, args: args)
statement_with_retry &.query(*args_, args: args)
rescue e : PQ::PQError
log_error(*args_, args: args)
raise e
end

def scalar(*args_, args : Array? = nil)
log_query(*args_, args: args)
statement_with_retry &.scalar(*args_, args: args)
rescue e : PQ::PQError
log_error(*args_, args: args)
raise e
end

private def log_query(*args_, args : Array? = nil)
Expand All @@ -32,5 +47,13 @@ module DB
Avram.logger.log(level, {query: @query, args: logging_args})
end
end

private def log_error(*args_, args : Array? = nil)
Avram.settings.query_failed_log_level.try do |level|
logging_args = EnumerableConcat.build(args_, args)
logging_args = logging_args.to_a if logging_args.is_a?(EnumerableConcat)
Avram.logger.log(level, {failed_query: @query, args: logging_args})
end
end
end
end

0 comments on commit 29a25e9

Please # to comment.