Мне нужно передавать журналы из моего Docker-контейнера для ведения журналов.
В настоящее время я это делаю. это:
Код: Выделить всё
stream = container.logs(stdout=True, stderr=True, stream=True)
for line in stream:
logger.info(line.decode("utf-8"))
Мой подход заключается в том, чтобы настройте два потока, один для стандартного вывода и один для 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()
Я также рассмотрел способы для доступа к файлам журналов из драйвера регистрации файлов Docker JSON, который я использую напрямую, но не нашел способа.
Есть ли способ передавать сообщения в правильном порядке, а также информацию, если сообщение пришло из стандартного вывода или stderr?
Подробнее здесь: https://stackoverflow.com/questions/783 ... tderr-in-c