python3记录器-Unicodeer错误
我的记录器设置如下:python3记录器-Unicodeer错误,python,python-3.x,Python,Python 3.x,我的记录器设置如下: import logging from logging.handlers import RotatingFileHandler import sys # root logger logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # create a file logger handler = RotatingFileHandler('log/core-application.log',
import logging
from logging.handlers import RotatingFileHandler
import sys
# root logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# create a file logger
handler = RotatingFileHandler('log/core-application.log', maxBytes=1024*1024*1, backupCount=3)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(funcName)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
# create stdout logger
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(funcName)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('Logging all setup')
在我的开发系统上,这个日志条目工作正常。它会记录您在此处看到的内容:
logger.info('messagekey:{}.format('2018-10-19_00:20:56\uxd8\xa7\xd9\x84\xd8\xb5\xd9\x88\xd8\xa7\xd9\x81/'))
我的ubuntu AWS EC2服务器上的同一行给了我一个错误:
---记录错误---回溯(最近一次调用):文件“/usr/lib/python3.5/Logging/init.py”,第982行,在emit中
stream.write(msg)UnicodeEncodeError:“ascii”编解码器无法对位置108-113中的字符进行编码:序号不在范围(128)内
谁能想象这是为什么
顺便说一句:
EC2服务器区域设置为:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
提前感谢。我刚刚找到了解决方案,希望与大家分享答案: 它连接到控制服务器上python应用程序的主管。 不知何故,supervisor config需要包含以下环境变量才能将UTF-8打印到标准输出
[supervisord]
environment=LC_ALL='en_US.UTF-8',LANG='en_US.UTF-8'
编辑:
Python 3.7似乎是为了自动解决这个问题而设计的。在搜索了很长时间之后,这个解决方案在Windows 10 x64和Python 3.7.6下对我有效,只要“logger.error('message',exc_info=True)”由于回溯包含无效字符而失败 在格式化程序字符串之前添加u以强制unicode消息:
#formatter = logging.Formatter('%(asctime)s - %(funcName)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(u'%(asctime)s - %(funcName)s - %(levelname)s - %(message)s'
希望它能帮助阅读本文的人。对我有效的方法是将encoding='utf8'arg添加到处理程序中:
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
log_path = '/var/log/app'
log_file = '%s/%s.log' % (log_path, name)
create_log_file(log_file)
handler = logging.FileHandler(log_file, encoding='utf8')
handler.setFormatter(formatter)
logger.addHandler(handler)
这是没有道理的。在Python>=3.3中,
u“…”
与“…”
完全相同,u
实际上是不可操作的。请参阅。