/
pool_statement_logging.cr
59 lines (53 loc) · 1.66 KB
/
pool_statement_logging.cr
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
module DB
abstract class PoolStatement
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)
Avram.settings.query_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, {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