Запись SQLAlchemy в отдельный файл - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сохранить свои журналы SQL-алхимии отдельно от моих пользовательских журналов

LOG_LEVEL = 20
LOG_FORMAT = "%(asctime)s %(name)s %(levelname)s %(message)s"
logging.basicConfig(filename='my_log.log', format=LOG_FORMAT, level=LOG_LEVEL)

handler_sql = logging.FileHandler('my_alchemy_log.log')
handler_sql.setFormatter(logging.Formatter(LOG_FORMAT))
sql_logger = logging.getLogger('sqlalchemy.engine')
sql_logger.setLevel(LOG_LEVEL)
sql_logger.addHandler(handler_sql)

logger = logging.getLogger(__name__)
logger.info("this belongs to my_log")

s = sessionmaker(bind=create_engine(CONN_STRING, poolclass=NullPool))
result = s.query(SomeTableModel).filter_by(**kwargs).first()
s.close()

То, что происходит, - это два файла, которые выглядят следующим образом:

my_log.log

2018-10-24 23:35:01,589 main INFO this belongs to my_log
2018-10-24 23:35:01,650 sqlalchemy.engine.base.Engine INFO SHOW VARIABLES LIKE 'sql_mode'
2018-10-24 23:35:01,650 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,689 sqlalchemy.engine.base.Engine INFO SELECT DATABASE()
2018-10-24 23:35:01,689 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,725 sqlalchemy.engine.base.Engine INFO SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2018-10-24 23:35:01,725 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,742 sqlalchemy.engine.base.Engine INFO SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2018-10-24 23:35:01,743 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,756 sqlalchemy.engine.base.Engine INFO BEGIN (implicit)
2018-10-24 23:35:01,770 sqlalchemy.engine.base.Engine INFO SELECT ..............

my_alchemy_log.log

2018-10-24 23:35:01,650 sqlalchemy.engine.base.Engine INFO SHOW VARIABLES LIKE 'sql_mode'
2018-10-24 23:35:01,650 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,689 sqlalchemy.engine.base.Engine INFO SELECT DATABASE()
2018-10-24 23:35:01,689 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,725 sqlalchemy.engine.base.Engine INFO SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2018-10-24 23:35:01,725 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,742 sqlalchemy.engine.base.Engine INFO SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2018-10-24 23:35:01,743 sqlalchemy.engine.base.Engine INFO {}
2018-10-24 23:35:01,756 sqlalchemy.engine.base.Engine INFO BEGIN (implicit)
2018-10-24 23:35:01,770 sqlalchemy.engine.base.Engine INFO SELECT ..............

Запросы повторяются и в my_log.log ! Этого не ожидается !!! Ожидается, что my_log.log должен содержать только "это принадлежит my_log" и никаких запросов.Запросы должны заканчиваться только в my_alchemy_log.log

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете сделать

sql_logger.propagate = False

, который остановит события, зарегистрированные там, распространяемые на обработчики регистраторов предков (и, следовательно, корневого регистратора, который записывает в my_log.log).

Комуотключите все ведение журнала SQLAlchemy (не только с sqlalchemy.engine) с my_log.log, вам может понадобиться

logging.getLogger('sqlalchemy').propagate = False

Флаг propagate задокументирован здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...