Change alembi c logger - PullRequest
       34

Change alembi c logger

5 голосов
/ 24 апреля 2020

Мы используем alembi c для применения ревизии БД. Я настроил соединение, и оно работает как положено, за исключением того, что я не могу заставить его использовать наш клиентский регистратор.

У нас есть собственный класс регистратора (производный от Python logging), который используется во всем приложении и я хочу, чтобы alembi c использовал его вместо значения по умолчанию.

Можно ли как-нибудь передать ему объект логгера нашего класса? Я хочу, чтобы он печатал свой собственный журнал, используя формат и обработчик, которые определены в настраиваемом регистраторе.

Я пытался

env file

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context

from tools.logger import Logger

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.attributes.get('configure_logger', True):
    fileConfig(config.config_file_name)
logger = Logger('alembic.env')

мой скрипт

self.alembic_cfg = alembic_config(self.alembic_ini_path, attributes={'configure_logger': False})

Я также пытался,

self.alembic_cfg.set_section_option("logger", "keys", "root")

Оба вышеуказанных метода просто отключают свои собственные журналы.

1 Ответ

0 голосов
/ 02 мая 2020

Насколько мне известно, невозможно заменить один регистратор другим. Это то, что вам действительно нужно?

Я хочу, чтобы он печатал свой собственный журнал, используя формат и обработчик, которые определены в настраиваемом регистраторе.

Как я понять это, у логгера есть обработчики, а у обработчиков есть форматеры. Если у вас есть обработчик с средством форматирования, вы можете просто отредактировать alembic.ini и назначить свой обработчик для alembi c logger.

  1. добавить средство форматирования для средств форматирования в ini file
[formatters]  # existing section
keys = generic,pyraider  # just add the name of your formatter
определите свой пользовательский форматер
[formatter_pyraider]
class=tools.logger.PyraiderFormatter
добавить обработчик к обработчикам в ini файле
[handlers]  # existing section
keys = console,pyraider  # just add the name of your handler
определить ваш пользовательский обработчик
[handler_pyraider]  # new section, handler_<your_name>
class = tools.logger.PyraiderHandler
args = (sys.stderr,)  # might need to play around with this one
level = INFO
formatter = pyraider
назначить обработчик для alembi c logger
[logger_alembic]  # existing section, what you want
level = INFO
handlers = pyraider  # <----  add your handler, defined previously, here
qualname = alembic

Документы на файл alembic.ini.

https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing -the-ini-file

Вам может понадобиться настроить некоторые вещи, но это должно сработать, поскольку именно так работает модуль python logging.

Дополнительная информация о том, как структурировать файл ini для ведения журнала модуль
Официальный Python Документы
Руководство автостопщика

...