Имеющий код типа:
raise Exception(u'щ')
Вызванный:
File "/usr/lib/python2.7/logging/__init__.py", line 467, in format
s = self._fmt % record.__dict__
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Это происходит потому, что строка формата является байтовой строкой, а некоторые аргументы строки формата являются строками Юникода с не-ASCII-символами:
>>> "%(message)s" % {'message': Exception(u'\u0449')}
*** UnicodeEncodeError: 'ascii' codec can't encode character u'\u0449' in position 0: ordinal not in range(128)
Создание строки формата Unicode устраняет проблему:
>>> u"%(message)s" % {'message': Exception(u'\u0449')}
u'\u0449'
Итак, в вашей конфигурации логирования сделайте все строки формата unicode:
'formatters': {
'simple': {
'format': u'%(asctime)-s %(levelname)s [%(name)s]: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
...
И исправьте стандартный форматер logging
, чтобы использовать строку формата Unicode:
logging._defaultFormatter = logging.Formatter(u"%(message)s")