BEGIN call загрязняет логи SQLAlchemy
Я использую SQLAlchemy 0.6.3 с Pylons 1.0, и мой файл sqlalchemy.log загрязняется вызовами "BEGIN":
2011-01-14 10:15:17 SELECT /* redacted */
2011-01-14 10:15:22 BEGIN
2011-01-14 10:15:27 BEGIN
2011-01-14 10:15:32 BEGIN
2011-01-14 10:15:37 BEGIN
2011-01-14 10:15:42 BEGIN
2011-01-14 10:15:47 BEGIN
2011-01-14 10:15:52 BEGIN
2011-01-14 10:15:53 SELECT /* redacted */
2011-01-14 10:16:33 BEGIN
2011-01-14 10:16:35 BEGIN
2011-01-14 10:16:42 BEGIN
2011-01-14 10:16:49 BEGIN
2011-01-14 10:16:52 BEGIN
Это действительно раздражает и мешает видеть полезный код SQL, выполняемый SQLAlchemy. Есть ли способ предотвратить распечатывание SQLAlchemy или вообще выполнить их? Кажется, они ничего не делают.
1 ответ
Одним из подходов было бы выяснить, почему SQLAlchemy делает это, и посмотреть, можно ли их избежать. Другим было бы отфильтровать их на уровне регистрации. Питона logging
Модуль поддерживает фильтры.
Вот быстрый автономный пример, адаптированный из этого примера из документации по Python:
import logging
class BeginFilter(logging.Filter):
""" This is a filter which drops BEGIN statements. """
def filter(self, record):
return False if record.msg == "BEGIN" else True
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)-15s %(name)-5s %(levelname)-8s %(message)s")
a1 = logging.getLogger("a.b.c")
f = BeginFilter()
a1.addFilter(f)
a1.debug("SELECT ...")
a1.debug("BEGIN")
a1.debug("BEGIN")
a1.debug("BEGIN")
a1.debug("BEGIN")
a1.debug("SELECT ...")
a1.debug("BEGIN")