Журналы Docker в Docker Python SDK: различие между stdout и stderr в правильном порядкеPython

Программы на Python
Anonymous
Журналы Docker в Docker Python SDK: различие между stdout и stderr в правильном порядке

Сообщение Anonymous »

Я использую Docker SDK для Python.
Мне нужно передавать журналы из моего Docker-контейнера для ведения журналов.
В настоящее время я это делаю. это:

Код: Выделить всё

stream = container.logs(stdout=True, stderr=True, stream=True)

for line in stream:
logger.info(line.decode("utf-8"))
Теперь мне нужно различать стандартный вывод и стандартный вывод. Предполагается, что стандартный вывод будет записываться в logger.info, а стандартный вывод — в logger.error.
Мой подход заключается в том, чтобы настройте два потока, один для стандартного вывода и один для stderr, и читайте их параллельно в разных потоках.

Код: Выделить всё

def process_stream(stream, callback):
for line in stream:
callback(line.decode("utf-8").strip())

stdout_stream = container.logs(stdout=True, stderr=False, stream=True, timestamps=True)
stderr_stream = container.logs(stdout=False, stderr=True, stream=True, timestamps=True)

stdout_thread = Thread(
target=process_stream,
args=(
stdout_stream,
logger.info,
),
)
stderr_thread = Thread(
target=process_stream,
args=(
stderr_stream,
logger.error,
),
)

stdout_thread.start()
stderr_thread.start()

stdout_thread.join()
stderr_thread.join()
Однако сообщения из stdout и stderr не всегда регистрируются в правильном порядке.
Я также рассмотрел способы для доступа к файлам журналов из драйвера регистрации файлов Docker JSON, который я использую напрямую, но не нашел способа.
Есть ли способ передавать сообщения в правильном порядке, а также информацию, если сообщение пришло из стандартного вывода или stderr?

Подробнее здесь: https://stackoverflow.com/questions/783 ... tderr-in-c

Вернуться в «Python»