python - 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
提前致谢。
解决方案
我刚刚找到了解决方案,并想分享答案:
它连接到控制服务器上的 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 似乎旨在自动解决这个问题。
推荐阅读
- r - 如何从 R 中具有字符向量的命名列表中生成包含具有重复整数的向量的命名列表?
- flutter - 后台接收数据时如何将数据保存在Hive数据库中?
- php - (InvalidArgumentException(code: 0): Disk [public] 没有配置驱动程序 Voyager
- javascript - 与钩子一起使用时,React 组件正在选择旧状态
- c++ - 有运行我的内核项目的模拟器吗?
- shell - 如何在雪花的put命令中传递当前日期文件夹的变量
- javascript - 在javascript中包含html文件的代码。使用包含
- javascript - 在 React 和 Graphql 中操作数据数组
- css - 如何在 React/Antd 中将标签栏标题创建为固定/粘性?
- c# - 在 WPF 中以高刷新率显示字节数组图像