如何添加encoding
参数logging.basicConfig
?
我发现这个错误报告指出 Python 3.3 现在可以做到这一点。我在 Python 2.7 中需要这个,并且错误报告说要使用自定义logging.FileHandler
对象,但我无法让它工作。
如何添加encoding
参数logging.basicConfig
?
我发现这个错误报告指出 Python 3.3 现在可以做到这一点。我在 Python 2.7 中需要这个,并且错误报告说要使用自定义logging.FileHandler
对象,但我无法让它工作。
在您的情况下避免使用会更容易basicConfig()
- 只需创建处理程序并以编程方式添加它(确保代码只运行一次),例如:
root_logger= logging.getLogger()
root_logger.setLevel(logging.DEBUG) # or whatever
handler = logging.FileHandler('test.log', 'w', 'utf-8') # or whatever
handler.setFormatter(logging.Formatter('%(name)s %(message)s')) # or whatever
root_logger.addHandler(handler)
这或多或少是什么basicConfig()
。
更新:在 Python 3.9 及更高版本中,basicConfig()
具有可用encoding
的errors
关键字参数。
您可以传递特定文件处理程序的列表:
import logging
logging.basicConfig(handlers=[logging.FileHandler(filename="./log_records.txt",
encoding='utf-8', mode='a+')],
format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
datefmt="%F %A %T",
level=logging.INFO)
它运行良好(python 版本 == Python 3.6.8 :: Anaconda, Inc.)
Vinay 的回复非常有帮助,但为了让它发挥作用,我不得不调整语法:
root_logger= logging.getLogger()
root_logger.setLevel(logging.DEBUG) # or whatever
handler = logging.FileHandler('test.log', 'w', 'utf-8') # or whatever
formatter = logging.Formatter('%(name)s %(message)s') # or whatever
handler.setFormatter(formatter) # Pass handler as a parameter, not assign
root_logger.addHandler(handler)