Python3记录器UnicodeEncodeE

2024-09-28 03:15:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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服务器上的同一行给出了一个错误:

--- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.5/logging/init.py", line 982, in emit stream.write(msg) UnicodeEncodeError: 'ascii' codec can't encode characters in position 108-113: ordinal not in range(128)

有人能想象为什么会这样吗?在

顺便说一句: EC2服务器区域设置包括:

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

提前谢谢。在


Tags: inimportinfologmessageformatterloggingcreate
1条回答
网友
1楼 · 发布于 2024-09-28 03:15:11

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

它连接到服务器上控制python应用程序的管理器。 不知何故,supervisor config需要包含以下环境变量才能将UTF-8打印到stdout。在

[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

Python3.7似乎是为了自动解决这个问题而设计的。在

相关问题 更多 >

    热门问题