@@ -231,7 +231,7 @@ def add_query_logger(self, callback):
231
231
**query**: a LoggedQuery containing the query, args, timeout, and
232
232
elapsed.
233
233
234
- .. versionadded:: 0.28 .0
234
+ .. versionadded:: 0.29 .0
235
235
"""
236
236
self ._query_loggers .add (_Callback .from_callable (callback ))
237
237
@@ -242,7 +242,7 @@ def remove_query_logger(self, callback):
242
242
The callable or coroutine function that was passed to
243
243
:meth:`Connection.add_query_logger`.
244
244
245
- .. versionadded:: 0.28 .0
245
+ .. versionadded:: 0.29 .0
246
246
"""
247
247
self ._query_loggers .discard (_Callback .from_callable (callback ))
248
248
@@ -1696,6 +1696,31 @@ async def _execute(
1696
1696
return result
1697
1697
1698
1698
def logger (self , callback ):
1699
+ """Context manager that adds `callback` to the list of query loggers,
1700
+ and removes it upon exit.
1701
+
1702
+ :param callable callback:
1703
+ A callable or a coroutine function receiving two arguments:
1704
+ **connection**: a Connection the callback is registered with.
1705
+ **query**: a LoggedQuery containing the query, args, timeout, and
1706
+ elapsed.
1707
+
1708
+ Example:
1709
+
1710
+ .. code-block:: pycon
1711
+
1712
+ >>> class QuerySaver:
1713
+ def __init__(self):
1714
+ self.queries = []
1715
+ def __call__(self, conn, record):
1716
+ self.queries.append(record.query)
1717
+ >>> with con.logger(QuerySaver()) as log:
1718
+ >>> await con.execute("SELECT 1")
1719
+ >>> print(log.queries)
1720
+ ['SELECT 1']
1721
+
1722
+ .. versionadded:: 0.29.0
1723
+ """
1699
1724
return _LoggingContext (self , callback )
1700
1725
1701
1726
def _log_query (self , query , args , timeout , elapsed ):
@@ -2389,7 +2414,7 @@ def __init__(self, conn, callback):
2389
2414
2390
2415
def __enter__ (self ):
2391
2416
self ._conn .add_query_logger (self ._cb )
2392
- return self
2417
+ return self . _cb
2393
2418
2394
2419
def __exit__ (self , * exc_info ):
2395
2420
self ._conn .remove_query_logger (self ._cb )
0 commit comments