将编码参数添加到logging.basicConfig

Bio*_*eek 10 python logging

如何添加encoding参数logging.basicConfig

我发现这个错误报告说明现在可以用于Python 3.3.我需要这个用于Python 2.7,并且bug报告说要使用自定义logging.FileHandler对象,但我无法让它工作.

Vin*_*jip 19

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)
Run Code Online (Sandbox Code Playgroud)

这或多或少是basicConfig()做什么的.


小智 11

您可以传递特定文件处理程序的列表:

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)
Run Code Online (Sandbox Code Playgroud)

它运行良好(python 版本 == Python 3.6.8 :: Anaconda, Inc.)


小智 10

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)
Run Code Online (Sandbox Code Playgroud)