Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python3记录器-Unicodeer错误_Python_Python 3.x - Fatal编程技术网

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
实际上是不可操作的。请参阅。