繁体   English   中英

PYTHON-记录到文件并将调试语句打印到控制台

[英]PYTHON-Logging to file and printing DEBUG statements to console

我一直在努力将调试语句打印到控制台(+ 到文件)和信息到文件。 这是一个大模块,我将在主文件中创建的记录器对象传递给函数调用中的所有其他对象。


logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%Y%m%d %H:%M',
                    filename='full_log.log',
                    filemode='w')

console = logging.StreamHandler()
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')

console.setFormatter(formatter)
console.setLevel(logging.DEBUG)
logging.getLogger('').addHandler(console)

logger_1 = logging.getLogger('logger_1')
logger_module = logging.getLogger('module')

logger_1.debug("sample debug")
logger_1.info("sample info")
fil.main(logger_module)

测试/fil.py

def main(logger):
    logger.info("Hello logging!")

info 和 debug 都打印到控制台并写入文件。 有人可以解释一下我做错了什么吗? 如何设置打印和写入文件的级别?

您正在将控制台处理程序的级别设置为DEBUG但您根本没有设置由 basicConfig 添加的 FileHandler 的级别。 在 basicConfig 中设置的级别应用于根记录器,但您正在使用传播的子记录器进行记录。

这绕过了父记录器的级别,因为它直接使用处理程序。 此处的文档对此进行了解释。

消息直接传递给祖先记录器的处理程序——既不考虑所讨论的祖先记录器的级别或过滤器。

解决方案不是使用 basicConfig 而是创建一个logging.FileHandler为其设置级别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM