python 3.6 *logging modul error* UnicodeEncodeError: 'charmap' codec can't encode characters

python 3.6 *logging modul error* UnicodeEncodeError: 'charmap' codec can't encode characters

在 Windows 10 日志模块发送此错误(使用 scrapy)

# --- Logging error ---
...
# UnicodeEncodeError: 'charmap' codec can't encode characters in position 175-176: character maps to <undefined>

我读到我应该添加 encoding='utf-8' 但我没有找到如何在下面的代码中添加它。 编辑:根据the tuto 不需要。

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(或 )。日志教程甚至没有谈论 utf-8。 (请注意,我可以毫无问题地打印 UTF8 字符。问题仅出现在日志记录模块中)

我没有使用 Scrapy 但我 运行 遇到了与 vanilla Python 3.6 记录无法通过 [=13= 写入 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 
)