@@ -458,13 +458,25 @@ def init_log_file(local_relative_path: str) -> Path:
458458 return full_path
459459
460460
461- def upload_to_remote (logger : FilteringBoundLogger ):
461+ def load_remote_log_handler () -> logging .Handler | None :
462+ from airflow .logging_config import configure_logging as airflow_configure_logging
463+ from airflow .utils .log .log_reader import TaskLogReader
464+
465+ try :
466+ airflow_configure_logging ()
467+
468+ return TaskLogReader ().log_handler
469+ finally :
470+ # This is a _monstrosity_ but put our logging back immediately...
471+ configure_logging ()
472+
473+
474+ def upload_to_remote (logger : FilteringBoundLogger , log_meta_dict : dict [str , Any ]):
462475 # We haven't yet switched the Remote log handlers over, they are still wired up in providers as
463476 # logging.Handlers (but we should re-write most of them to just be the upload and read instead of full
464477 # variants.) In the mean time, lets just create the right handler directly
465478 from airflow .configuration import conf
466479 from airflow .utils .log .file_task_handler import FileTaskHandler
467- from airflow .utils .log .log_reader import TaskLogReader
468480
469481 raw_logger = getattr (logger , "_logger" )
470482
@@ -481,7 +493,7 @@ def upload_to_remote(logger: FilteringBoundLogger):
481493 base_log_folder = conf .get ("logging" , "base_log_folder" )
482494 relative_path = Path (fname ).relative_to (base_log_folder )
483495
484- handler = TaskLogReader (). log_handler
496+ handler = load_remote_log_handler ()
485497 if not isinstance (handler , FileTaskHandler ):
486498 logger .warning (
487499 "Airflow core logging is not using a FileTaskHandler, can't upload logs to remote" ,
@@ -493,6 +505,7 @@ def upload_to_remote(logger: FilteringBoundLogger):
493505 # set_context() which opens a real FH again. (And worse, in some cases it _truncates_ the file too). This
494506 # is just for the first Airflow 3 betas, but we will re-write a better remote log interface that isn't
495507 # tied to being a logging Handler.
508+ handler .log_meta_dict = log_meta_dict # type: ignore[attr-defined]
496509 handler .log_relative_path = relative_path .as_posix () # type: ignore[attr-defined]
497510 handler .upload_on_close = True # type: ignore[attr-defined]
498511
0 commit comments