使用 Python 登录文件

logging in file using Python

我这样做是为了将信息保存到我的文件中,但我的控制台中也有输出。我该怎么做才能在我的控制台中看到信息,但在我的文件中看到它?

logger = logging.getLogger('resource_manager')
logger.setLevel(logging.DEBUG)
info_log = logging.FileHandler('/home/nvidia/Videos/Info.log')
info_log.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
info_log.setLevel(logging.INFO)
logger.addHandler(info_log)

logger.info(f'{(time.time()-delay)}')

在这里,您添加了一个处理程序来写入文件。您需要做的是 remove the default handler 写入 STDERR。

您可以禁止事件从这个记录器传播到它的父记录器(根记录器),这将防止它们被根记录器的 StreamHandler 处理(这是写入标准错误的内容)。

logger = logging.getLogger('resource_manager')
logger.propagate = False

I did this to save info to my file, but I also got output in my console.

这可能意味着其他一些日志记录配置已经处于活动状态(例如,您确定 logging.basicConfig() 没有在同一个 Python 程序中被调用吗?);特别是,根记录器 附加了一个 StreamHandler

记录器根据其名称按层次结构进行组织;例如,foofoo.barfoo.baz 的父级,而 foo.bazfoo.baz.spam 的父级。在该层次结构的顶端是 root logger(即 其名称为空 的记录器)。默认情况下,记录器将发出的记录(除非记录级别对于给定记录器而言太低)传播到它们的父级(以便最终这些记录到达 root 记录器)。

防止记录器将发出的记录传播给父级的一种简单方法是将记录器的 propagate 属性设置为 False(默认情况下为 True)。

所以试试这个:

logger.propagate = False

推荐阅读: