Python logging.getLogger не работает в AWS Клей python работа оболочки - PullRequest
2 голосов
/ 25 января 2020

Я пытаюсь настроить регистратор для моей работы AWS Glue с помощью модуля Python logging. У меня есть работа Glue с типом «Python Shell» с использованием Python версии 3.

Ведение журнала работает нормально, если я создаю экземпляр регистратора без name, но если я даю своему регистратору name, он больше не работает, и я получаю сообщение об ошибке: Log stream not found.

У меня есть следующий код в примере работы с клеем:

import sys
import logging

# Version 1 - this works fine
logger = logging.getLogger()
log_format = "[%(asctime)s %(levelname)-8s %(message)s"

# Version 2 - this fails
logger = logging.getLogger(name = "foobar")
log_format = "[%(name)s] %(asctime)s %(levelname)-8s %(message)s"

date_format = "%a, %d %b %Y %H:%M:%S %Z"
log_stream = sys.stdout
if logger.handlers:
  for handler in logger.handlers:
    logger.removeHandler(handler)
logging.basicConfig(level = logging.INFO, format = log_format, stream =
    log_stream, datefmt = date_format)
logger.info("This is a test.")

Обратите внимание, что я ' Удаление обработчиков на основе этой записи.

Если я создаю экземпляр регистратора, используя версию 1 кода, он запускается успешно, и я могу просматривать журналы, а также запрашивать их в CloudWatch.

Если я запускаю Версию 2, присваивая логгеру имя, задание Glue по-прежнему выполняется успешно. Однако, если я пытаюсь просмотреть журналы, я получаю следующее сообщение об ошибке:

Log stream not found
The log stream jr_f137743545d3d242618ac95d859b9146fd15d15a0aadce64d8f3ba991ffed012 could not be found. Check if it was correctly created and retry.

И я также не могу запросить эти журналы в CloudWatch.

Я пытался локальный запуск этого кода с использованием python версия 3.6.0, и обе версии работают. Кроме того, обе версии этого кода регистрации работают внутри лямбда-функции. Они терпят неудачу только в Клее.

Ответы [ 2 ]

1 голос
/ 29 января 2020

У меня была похожая проблема, но я исправил ее с помощью комбинации правильных ролей и поиска в нужном месте в Cloudwatch. Убедитесь, что вы используете GlueServiceRole. И Стив, и ваш код входа в систему хороши, но место, в которое вы попали в Cloudwatch при нажатии на кнопку «logs» в Glue, не является правильной папкой для ведения журнала.

Go обратно в группы журналов, а затем go в / aws -glue / python -jobs / error, и именно туда ведет запись регистратор, в то время как stdout пишет в папку / aws -glue / python -jobs / выход. Это не очень интуитивно понятная настройка записи журналов в папку журналов ошибок, но, эй, я уверен, что есть способ настроить ее так, чтобы она записывала туда, где и ожидалось.

1 голос
/ 25 января 2020

Вы должны быть в состоянии назвать поток журналов с помощью следующего (замените «logger-name-here» на желаемое имя потока журналов):

import logging

MSG_FORMAT = '%(asctime)s %(levelname)s %(name)s: %(message)s'
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(format=MSG_FORMAT, datefmt=DATETIME_FORMAT)
logger = logging.getLogger(<logger-name-here>)

logger.setLevel(logging.INFO)

logger.info("Test log message")
...