Я использую Celery 3.1.18 с Python 2.7.8 на CentOS 6.5.Журнал работника сельдерея содержит вопросительные знаки (???) вместо правильных символов юникода
В модуле сельдерея задачи, у меня есть следующий код:
# someapp/tasks.py
from celery import shared_task
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
@shared_task()
def foo():
logger.info('Test output: %s', u"测试中")
я использую the initd script here запустить сельдерей работник. Кроме того, я поставил следующие параметры в /etc/default/celeryd
:
CELERYD_NODES="bar"
# %N will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%N.log"
# Workers should run as an unprivileged user.
# You need to create this user manually (or you can choose
# a user/group combination that already exists, e.g. nobody).
CELERYD_USER="nobody"
CELERYD_GROUP="nobody"
Так что мой файл журнала находится в /var/log/celery/bar.log
.
Однако после того, как задача выполняется работником, выше файл журнала показывает:
[2015-05-07 03:51:14,438: INFO/Worker-1/someapp.tasks.foo(...)] Test output: ???
ЮНИКОДу символы исчезли, сменившись ряд вопросительных знаков.
Как я могу вернуть символы Unicode в файле журнала?
Вы уверены, что эта проблема связана с сельдереем? Что произойдет, если вы сделаете то же самое на регулярном скрипте python? Также, что произойдет, если вы укажете 'u" 测试 中 ".encode ('utf-8')' вместо просто 'u" 测试 中 "?? – Dacav
В обычном скрипте Python запись в Юникоде прекрасна. Кроме того, если я укажу '' 'u" 测试 中 ".encode ('utf-8')' '' вместо '' 'u" 测试 中 "' '' в моем примере, журнал Celery показывает '' 'UnicodeDecodeError : 'ascii' codec не может декодировать байт ... '' '. – Rockallite