diff --git a/swh/graph/luigi/utils.py b/swh/graph/luigi/utils.py --- a/swh/graph/luigi/utils.py +++ b/swh/graph/luigi/utils.py @@ -6,30 +6,59 @@ from pathlib import Path from typing import Dict +LOGBACK_CONF = b"""\ + + + System.err + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n + + + + + + + +""" +"""Overrides the default config, to log to stderr instead of stdout""" + def run_script(script: str, output_path: Path) -> None: import os import subprocess + import tempfile from ..config import check_config conf: Dict = {} # TODO: configurable - conf = check_config(conf) - env = { - **os.environ.copy(), - "JAVA_TOOL_OPTIONS": conf["java_tool_options"], - "CLASSPATH": conf["classpath"], - } - output_path.parent.mkdir(parents=True, exist_ok=True) tmp_output_path = Path(f"{output_path}.tmp") - with tmp_output_path.open("wb") as tmp_output: - subprocess.run( - ["bash", "-c", f"{script.strip()}"], stdout=tmp_output, env=env, check=True - ) + conf = check_config(conf) + + with tempfile.NamedTemporaryFile(prefix="logback_", suffix=".xml") as logback_conf: + logback_conf.write(LOGBACK_CONF) + + java_tool_options = [ + "-Dlogback.configurationFile={logback_conf}", + conf["java_tool_options"], + ] + + env = { + **os.environ.copy(), + "JAVA_TOOL_OPTIONS": " ".join(java_tool_options), + "CLASSPATH": conf["classpath"], + } + + with tmp_output_path.open("wb") as tmp_output: + subprocess.run( + ["bash", "-c", f"{script.strip()}"], + stdout=tmp_output, + env=env, + check=True, + ) # Atomically write the output file tmp_output_path.replace(output_path)