Better handling of stdout/stderr logging
This commit is contained in:
parent
12da998538
commit
c80b2774d4
|
@ -53,14 +53,12 @@ def run(cmd: List[str]) -> int:
|
||||||
child = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
child = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
||||||
stdoutdata, stderrdata = child.communicate()
|
stdoutdata, stderrdata = child.communicate()
|
||||||
|
|
||||||
if stdoutdata:
|
if stdoutdata.strip():
|
||||||
logger.debug(stdoutdata.decode().strip())
|
log_std('stdout', stdoutdata.decode(),
|
||||||
logger.debug('-' * 28)
|
logging.DEBUG if child.returncode == 0 else logging.ERROR)
|
||||||
|
|
||||||
if stderrdata:
|
if stderrdata.strip():
|
||||||
logger.error('%s STDERR %s', '-' * 10, '-' * 10)
|
log_std('stderr', stderrdata.decode(), logging.ERROR)
|
||||||
logger.error(stderrdata.decode().strip())
|
|
||||||
logger.error('-' * 28)
|
|
||||||
|
|
||||||
logger.debug("returncode %s", child.returncode)
|
logger.debug("returncode %s", child.returncode)
|
||||||
return child.returncode
|
return child.returncode
|
||||||
|
@ -71,3 +69,23 @@ def run_capture_std(cmd: List[str]) -> Tuple[str, str]:
|
||||||
logger.debug('cmd: %s', ' '.join(cmd))
|
logger.debug('cmd: %s', ' '.join(cmd))
|
||||||
child = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
child = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
||||||
return child.communicate()
|
return child.communicate()
|
||||||
|
|
||||||
|
|
||||||
|
def log_std(source: str, data: str, level: int):
|
||||||
|
if isinstance(data, bytes):
|
||||||
|
data = data.decode()
|
||||||
|
|
||||||
|
if not data.strip():
|
||||||
|
return
|
||||||
|
|
||||||
|
log_func = logger.debug if level == logging.DEBUG else logger.error
|
||||||
|
log_func('%s %s %s', '-' * 10, source, '-' * 10)
|
||||||
|
|
||||||
|
lines = data.split('\n')
|
||||||
|
if lines[-1] == '':
|
||||||
|
lines.pop()
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
log_func(line)
|
||||||
|
|
||||||
|
log_func('-' * 28)
|
||||||
|
|
|
@ -47,17 +47,17 @@ def backup_from_stdin(repository: str, filename: str, source_command: List[str])
|
||||||
dest_process = Popen(dest_command, stdin=source_process.stdout, stdout=PIPE, stderr=PIPE)
|
dest_process = Popen(dest_command, stdin=source_process.stdout, stdout=PIPE, stderr=PIPE)
|
||||||
stdout, stderr = dest_process.communicate()
|
stdout, stderr = dest_process.communicate()
|
||||||
|
|
||||||
if stdout:
|
|
||||||
for line in stdout.decode().split('\n'):
|
|
||||||
logger.debug(line)
|
|
||||||
|
|
||||||
if stderr:
|
|
||||||
for line in stderr.decode().split('\n'):
|
|
||||||
logger.error(line)
|
|
||||||
|
|
||||||
# Ensure both processes exited with code 0
|
# Ensure both processes exited with code 0
|
||||||
source_exit, dest_exit = source_process.poll(), dest_process.poll()
|
source_exit, dest_exit = source_process.poll(), dest_process.poll()
|
||||||
return 0 if (source_exit == 0 and dest_exit == 0) else 1
|
exit_code = 0 if (source_exit == 0 and dest_exit == 0) else 1
|
||||||
|
|
||||||
|
if stdout:
|
||||||
|
commands.log_std('stdout', stdout, logging.DEBUG if exit_code == 0 else logging.ERROR)
|
||||||
|
|
||||||
|
if stderr:
|
||||||
|
commands.log_std('stderr', stderr, logging.ERROR)
|
||||||
|
|
||||||
|
return exit_code
|
||||||
|
|
||||||
|
|
||||||
def snapshots(repository: str, last=True) -> Tuple[str, str]:
|
def snapshots(repository: str, last=True) -> Tuple[str, str]:
|
||||||
|
|
Loading…
Reference in New Issue