Rio McMahon
07/24/2023, 2:58 PMlogger = logging.getLogger(__name__)
object from the logging
library? Setting the environmental variable PREFECT_LOGGING_EXTRA_LOGGERS=logging
does not seem to work. Thanks.Carlos Velazquez
07/24/2023, 3:39 PMprefect.get_run_logger()
maybe that help you!from prefect import flow, get_run_logger
@flow(name="log-example-flow")
def logger_flow():
logger = get_run_logger()
<http://logger.info|logger.info>("INFO level log message.")
Rio McMahon
07/24/2023, 5:08 PMlogging
library and I want to capture that output without modifications to the original code.Carlos Velazquez
07/24/2023, 7:32 PMRio McMahon
07/24/2023, 7:36 PMCarlos Velazquez
07/24/2023, 7:43 PMfrom logging import LoggerAdapter
native from logging
from logging import LoggerAdapter
class PrefectContextLogging():
def __init__(self, prefect_logger_adapter: LoggerAdapter) -> None:
super().__init__(
name=prefect_logger_adapter.logger.name,
level=prefect_logger_adapter.logger.level,
get_logger=lambda x: prefect_logger_adapter.logger
)
self._logger_adapter = prefect_logger_adapter
then you can set up the prefect logger in your code:
PrefectContextLogging(prefect.get_run_logger())
https://docs.python.org/3/library/logging.html#loggeradapter-objectsRio McMahon
07/24/2023, 7:46 PMclass PrefectContextLogging():
doesn’t have a class that it is inheriting from so calling super().__init__(...)
doesn’t work unless I am missing somethingCarlos Velazquez
07/25/2023, 4:58 PMRio McMahon
07/25/2023, 5:00 PMfrom logging import LoggerAdapter
import prefect
from prefect import flow
class PrefectContextLogging():
def __init__(self, prefect_logger_adapter: LoggerAdapter) -> None:
super().__init__(
name=prefect_logger_adapter.logger.name,
level=prefect_logger_adapter.logger.level,
get_logger=lambda x: prefect_logger_adapter.logger
)
self._logger_adapter = prefect_logger_adapter
@flow
def test():
PrefectContextLogging(prefect.get_run_logger())
test()
returns TypeError: object.__init__() takes exactly one argument (the instance to initialize)
Carlos Velazquez
07/25/2023, 5:03 PM@flow(name=name_flow_you_want)
async def test_flow() -> None:
prefect.get_run_logger().info('Running flow test')
log = PrefectContextLogging(prefect.get_run_logger())
log.add_context(ctx_foo='bar')
log.add_data(data_foo='bar')
prefect.get_run_logger()
If you don't used PrefectContextLogging works Logging.logger simply! idk maybe like this:logger = logging.getLogger(__name__)
def set_logget_prefect(logger) -> None:
global logger
logger = logger
And inside the flow you just do it this:
set_logget_prefect(PrefectContextLogging(prefect.get_run_logger()))
<http://logger.logger.info|logger.logger.info>('info in prefect')
<http://logger.logger.info|logger.logger.info>('info simply')
Rio McMahon
07/25/2023, 5:12 PMCarlos Velazquez
07/25/2023, 5:14 PM