@@ -466,8 +466,7 @@ def main(argsl=None, # type: List[str]
466
466
_logger .addHandler (stderr_handler )
467
467
# pre-declared for finally block
468
468
workflowobj = None
469
- prov_log_handler = None # type: Optional[logging.FileHandler]
470
- prov_log_handler_file = None # type: Optional[IO[Any]]
469
+ prov_log_handler = None # type: Optional[logging.StreamHandler]
471
470
try :
472
471
if args is None :
473
472
if argsl is None :
@@ -544,14 +543,11 @@ def main(argsl=None, # type: List[str]
544
543
if not args .compute_checksum :
545
544
_logger .error ("--provenance incompatible with --no-compute-checksum" )
546
545
return 1
547
- runtimeContext . research_obj = ResearchObject (
546
+ ro = ResearchObject (
548
547
temp_prefix_ro = args .tmpdir_prefix , orcid = args .orcid ,
549
548
full_name = args .cwl_full_name )
550
- assert runtimeContext .research_obj .folder
551
- prov_log_handler_filename = os .path .join (
552
- runtimeContext .research_obj .folder , "log" )
553
- prov_log_handler = logging .FileHandler (
554
- str (prov_log_handler_filename ))
549
+ log_file_io = ro .open_log_file_for_activity (ro .engine_uuid )
550
+ prov_log_handler = logging .StreamHandler (log_file_io )
555
551
class ProvLogFormatter (logging .Formatter ):
556
552
"""Enforce ISO8601 with both T and Z."""
557
553
def __init__ (self ): # type: () -> None
@@ -566,12 +562,13 @@ def formatTime(self, record, datefmt=None):
566
562
return with_msecs
567
563
prov_log_handler .setFormatter (ProvLogFormatter ())
568
564
_logger .addHandler (prov_log_handler )
565
+ _logger .debug ("[provenance] Logging to %s" , log_file_io )
569
566
570
567
if loadingContext is None :
571
568
loadingContext = LoadingContext (vars (args ))
572
569
else :
573
570
loadingContext = loadingContext .copy ()
574
- loadingContext .research_obj = runtimeContext . research_obj
571
+ loadingContext .research_obj = ro
575
572
loadingContext .disable_js_validation = \
576
573
args .disable_js_validation or (not args .do_validate )
577
574
loadingContext .construct_tool_object = getdefault (
@@ -795,9 +792,15 @@ def loc_to_path(obj):
795
792
assert prov_dep
796
793
research_obj .generate_snapshot (prov_dep )
797
794
if prov_log_handler :
798
- prov_log_handler .close ()
795
+ # Stop logging so we won't half-log adding ourself to RO
796
+ _logger .debug (u"[provenance] Closing provenance log file %s" ,
797
+ prov_log_handler )
799
798
_logger .removeHandler (prov_log_handler )
800
- research_obj .write_log (prov_log_handler_filename )
799
+ # Ensure last log lines are written out
800
+ prov_log_handler .flush ()
801
+ # Underlying WritableBagFile will add the tagfile to the manifest
802
+ prov_log_handler .stream .close ()
803
+ prov_log_handler .close ()
801
804
research_obj .close (args .provenance )
802
805
803
806
_logger .removeHandler (stderr_handler )
0 commit comments