首页 > 解决方案 > python3 记录器 - UnicodeEncodeError

问题描述

我有一个这样的记录器设置:

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('message key: {}'.format('2018-10-19_00:20:56_\xd8\xa7\xd9\x84\xd8\xb5\xd9\x88\xd8\xa7\xd9\x81/'))

我的 ubuntu AWS EC2 服务器上的同一行给了我一个错误:

--- 日志记录错误 --- Traceback(最近一次调用):文件“/usr/lib/python3.5/logging/init .py”,第 982 行,在发出stream.write (msg) UnicodeEncodeError: 'ascii'编解码器无法对位置 108-113 中的字符进行编码:序数不在范围内(128)

谁能想象这是为什么?

顺便说一句:EC2 服务器语言环境是:

LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

提前致谢。

标签: pythonpython-3.x

解决方案


我刚刚找到了解决方案,并想分享答案:

它连接到控制服务器上的 python 应用程序的主管。不知何故,主管配置需要包含以下环境变量才能将 UTF-8 打印到标准输出。

[supervisord] 
environment=LC_ALL='en_US.UTF-8',LANG='en_US.UTF-8' 

编辑:

https://docs.python.org/3.7/whatsnew/3.7.html#whatsnew37-pep538

Python 3.7 似乎旨在自动解决这个问题。


推荐阅读