Ведение журнала работает локально, но не удаленно - PullRequest
0 голосов
/ 06 мая 2019

Я установил базовый Python Logger, который пишет в файл журнала и в стандартный вывод. Когда я запускаю свою программу на Python локально, сообщения журнала с logging.info появляются, как и ожидалось, в файле и в консоли. Однако, когда я запускаю ту же самую программу удаленно через ssh -n user@server python main.py, ни консоль, ни файл не показывают никаких сообщений logging.info.

Это код, используемый для настройки регистратора:

def setup_logging(model_type, dataset):
    file_name = dataset + "_" + model_type + time.strftime("_%Y%m%d_%H%M")
    logging.basicConfig(
        level=logging.INFO,
        format="[%(levelname)-5.5s %(asctime)s] %(message)s",
        datefmt='%H:%M:%S',
        handlers=[
            logging.FileHandler("log/{0}.log".format(file_name)),
            logging.StreamHandler()
        ])

Я уже пробовал следующие вещи:

  • Отправка сообщения на logging.warning: те, которые ожидаются в корневом логгере. Однако даже без настройки регистратора и возврата к стандартным сообщениям logging.info не отображаются.

  • Права доступа к файлам и папкам в порядке, и на диске создается пустой файл.

  • Использование print также работает как обычно

1 Ответ

1 голос
/ 06 мая 2019

Если вы посмотрите на исходный код функции basicConfig, вы увидите, что функция применяется только тогда, когда в корневом логгере нет обработчиков:

_acquireLock()
try:
    force = kwargs.pop('force', False)
    if force:
        for h in root.handlers[:]:
            root.removeHandler(h)
            h.close()
    if len(root.handlers) == 0:
        handlers = kwargs.pop("handlers", None)
        if handlers is None:
...

Я думаю, одна из используемых вами библиотек настраивает ведение журнала при импорте. И, как видно из примера выше, одним из решений является использование аргумента force=True.

Возможный недостаток заключается в том, что некоторые популярные библиотеки по науке о данных сохраняют ссылку на настраиваемые средства ведения журнала, поэтому при повторной настройке ведения журнала их старые средства ведения журнала с обработчиками остаются там и не видят ваши изменения. В этом случае вам также необходимо очистить обработчики для этих регистраторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...