在Windows 10上,日志记录模块发送此错误(使用scrapy)
# --- Logging error ---
...
# UnicodeEncodeError: 'charmap' codec can't encode characters in position 175-176: character maps to <undefined>
我已经读过我应该添加 编辑:根据the tuto它不需要。 encoding='utf-8'
但我没有找到如何在下面的代码中添加它。
configure_logging(install_root_handler=False) #override default log settings
logging.basicConfig(
filename='logfile.log',
format='%(levelname)s: %(message)s',
datefmt='%m-%d %H:%M',
level=logging.INFO #CRITICAL ERROR WARNING INFO DEBUG NOTSET
)
我发现了很多关于这些主题的问题,但主要是关于python 2(或not related to the logging module)。日志教程甚至没有谈论utf-8。 (请注意,我可以毫无问题地打印UTF8字符。只有记录模块才会出现问题)
答案 0 :(得分:9)
我没有使用Scrapy
,但我遇到了同样的问题,因为vanilla Python 3.6无法通过logging
将UTF-8字符写入文件(控制台工作正常)细)。
基于this comment,我在'utf-8'
初始化时添加了FileHandler
。我通过INI文件配置日志记录,如下所示:
[handler_file]
class = FileHandler
args = (r'log.txt', 'a', 'utf-8')
level = NOTSET
formatter = generic
使用logging.basicConfig()
我认为您应该能够执行以下操作:
configure_logging(install_root_handler=False) #override default log settings
logging.basicConfig(
handlers=[logging.FileHandler('logfile.log', 'w', 'utf-8')],
format='%(levelname)s: %(message)s',
datefmt='%m-%d %H:%M',
level=logging.INFO #CRITICAL ERROR WARNING INFO DEBUG NOTSET
)