Журналирование Jython дает неправильное время - PullRequest
1 голос
/ 16 декабря 2010

У меня есть сценарий Jython, который использует модуль регистрации Python для ведения журнала. На одной машине скрипт регистрируется нормально, а на другой время регистрируется на пять часов вперед. Предположительно это связано с тем, что машина находится в GMT-5. Как вы думаете, что может вызвать эту проблему?

Вот как я создаю объект регистрации:

log = logging.getLogger("my_log")
log.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
        log_file,
        maxBytes=log_size,
        backupCount=logs_count)
log_format = logging.Formatter("%(asctime)s:%(levelname)s:%(message)s")
handler.setFormatter(log_format)
handler.setLevel(logging.DEBUG)
log.addHandler(handler)

Я посмотрел на функцию log_format.converter. Я удостоверился, что время на проблемной машине установлено правильно. И я убедился, что Python печатает правильное время в оболочке Python.

Редактировать : Если я посмотрю на time.localtime() из оболочки Python (2.4.3), то получу кортеж с правильными значениями местного времени. Если я посмотрю на time.localtime() из скрипта Jython (2.5.2RC1), то увижу время в GMT.

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

Я думаю, что нашел проблему.Очевидно, сама Java неправильно понимала время, и причина была в том, что часовой пояс не был правильно установлен для Java на проблемной машине.export TZ='US/East' в /etc/profile.d/java.sh, кажется, решает проблему.

Мне потребовалось некоторое время, чтобы выяснить, потому что запуск date из оболочки выводит правильное местное время и информацию о часовом поясе,Python тоже смог правильно определить часовой пояс.

Спасибо, ребята!

0 голосов
/ 16 декабря 2010

Что для log_format.converter установлено? Согласно документации , по умолчанию используется time.localtime. Если вы измените его на time.gmtime, все время будет использоваться GMT.

0 голосов
/ 16 декабря 2010

Я бы проверил, где вы получили свою метку времени, чтобы убедиться, что она указана в UTC, и я бы проверил, где вы передаете метку времени, чтобы убедиться, что она действительно интерпретируется библиотекой как UTC.

...