更改 Alembic 记录器

PyR*_*der 6 python logging sqlalchemy alembic flask-migrate

我们正在使用 alembic 来应用 DB 修订版。我已经配置了连接并且它按预期工作,只是我无法使用我们的客户记录器。

我们有自己的记录器类(派生自 Python 日志记录),它在整个应用程序中使用,我希望 alembic 使用它而不是默认值。

有什么办法可以将我们类的记录器对象传递给它吗?我希望它使用自定义记录器中定义的格式和处理程序打印自己的日志。

我试过,

环境文件

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')
Run Code Online (Sandbox Code Playgroud)

我的剧本

self.alembic_cfg = alembic_config(self.alembic_ini_path, attributes={'configure_logger': False})
Run Code Online (Sandbox Code Playgroud)

我也试过,

self.alembic_cfg.set_section_option("logger", "keys", "root")
Run Code Online (Sandbox Code Playgroud)

以上两种方法都只是禁用了自己的日志。

Tom*_*cik 3

据我所知,不可能用一台记录仪替换另一台记录仪。这是你真正需要的东西吗?

我希望它使用自定义记录器中定义的格式和处理程序打印自己的日志。

据我了解,记录器有处理程序,处理程序有格式化程序。如果您有一个带有格式化程序的处理程序,您只需编辑处理alembic.ini程序并将其分配给 alembic 记录器即可。

  1. 将格式化程序添加到ini文件中的格式化程序
[formatters]  # existing section
keys = generic,pyraider  # just add the name of your formatter
Run Code Online (Sandbox Code Playgroud)
  1. 定义您的自定义格式化程序
[formatter_pyraider]
class=tools.logger.PyraiderFormatter
Run Code Online (Sandbox Code Playgroud)
  1. 将处理程序添加到ini文件中的处理程序
[handlers]  # existing section
keys = console,pyraider  # just add the name of your handler
Run Code Online (Sandbox Code Playgroud)
  1. 定义您的自定义处理程序
[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
Run Code Online (Sandbox Code Playgroud)
  1. 将处理程序分配给 alembic 记录器
[logger_alembic]  # existing section, what you want
level = INFO
handlers = pyraider  # <----  add your handler, defined previously, here
qualname = alembic
Run Code Online (Sandbox Code Playgroud)

文档已alembic.ini归档。

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

您可能需要调整一些东西,但它应该可以工作,因为这基本上就是 pythonlogging模块的工作方式。

有关如何构建日志ini模块文件的更多信息
官方 Python 文档
Hitchhiker's Guide