Skip to content

Commit ac23952

Browse files
committed
RO log using StreamHandler, implicitly added to manifest
1 parent 2fda58a commit ac23952

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

cwltool/main.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,7 @@ def main(argsl=None, # type: List[str]
466466
_logger.addHandler(stderr_handler)
467467
# pre-declared for finally block
468468
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]
471470
try:
472471
if args is None:
473472
if argsl is None:
@@ -544,14 +543,11 @@ def main(argsl=None, # type: List[str]
544543
if not args.compute_checksum:
545544
_logger.error("--provenance incompatible with --no-compute-checksum")
546545
return 1
547-
runtimeContext.research_obj = ResearchObject(
546+
ro = ResearchObject(
548547
temp_prefix_ro=args.tmpdir_prefix, orcid=args.orcid,
549548
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)
555551
class ProvLogFormatter(logging.Formatter):
556552
"""Enforce ISO8601 with both T and Z."""
557553
def __init__(self): # type: () -> None
@@ -566,12 +562,13 @@ def formatTime(self, record, datefmt=None):
566562
return with_msecs
567563
prov_log_handler.setFormatter(ProvLogFormatter())
568564
_logger.addHandler(prov_log_handler)
565+
_logger.debug("[provenance] Logging to %s", log_file_io)
569566

570567
if loadingContext is None:
571568
loadingContext = LoadingContext(vars(args))
572569
else:
573570
loadingContext = loadingContext.copy()
574-
loadingContext.research_obj = runtimeContext.research_obj
571+
loadingContext.research_obj = ro
575572
loadingContext.disable_js_validation = \
576573
args.disable_js_validation or (not args.do_validate)
577574
loadingContext.construct_tool_object = getdefault(
@@ -795,9 +792,15 @@ def loc_to_path(obj):
795792
assert prov_dep
796793
research_obj.generate_snapshot(prov_dep)
797794
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)
799798
_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()
801804
research_obj.close(args.provenance)
802805

803806
_logger.removeHandler(stderr_handler)

0 commit comments

Comments
 (0)