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")
Другие вопросы по тегам