1

我可以配置一个自定义记录器(例如,一个文件记录器),我可以在一个实体中成功使用它context.log.info(例如)。如何在标准 Python 函数/类中使用相同的记录器?

我正在使用标准colored_console_logger,以便我可以直接在控制台中看到正在发生的事情。这个想法是将它(或与它一起使用)与另一个(自定义)记录器交换。

可重现的例子:test_logging.py

from dagster import solid, pipeline, execute_pipeline, Field, ModeDefinition
from dagster.loggers import colored_console_logger

from random_func import random_func


@solid
def test_logs(context):
    context.log.info("Hello, world!")
    random_func()


@pipeline(mode_defs=[
    ModeDefinition(logger_defs={"console_logger": colored_console_logger})
])
def test_pipeline():
    test_logs()


if __name__ == "__main__":
    execute_pipeline(test_pipeline,
                     run_config={
                         'loggers': {
                             'console_logger': {
                                 'config': {
                                     'log_level': 'DEBUG',
                                     'name': 'console_logger',
                                 }
                             }
                         }
                     })

随机函数.py

import logging

lgr = logging.getLogger('console_logger')


def random_func():
    lgr.info('in random func')
    print('\nhi\n')
4

1 回答 1

0

Dagster 没有提供任何全局方式来访问实体上下文中的对象——您需要让您的函数接受一个参数并将记录器从实体传递给它。

import logging

lgr = logging.getLogger('console_logger')


def random_func(logger=lgr):
    logger.info('in random func')
    print('\nhi\n')
@solid
def test_logs(context):
    context.log.info("Hello, world!")
    random_func(logger=context.log)
于 2021-09-28T20:50:36.027 回答