记录日志和Python bokeh兼容性

3

我正在使用import logging来保存对bokeh服务器所做的更改,并希望将其保存到具有.log扩展名的文件中,但是当我运行bokeh服务器时,该文件未被创建,且无法将操作保存到.log文件中。下面是我编写的代码的一部分。

可能是我在代码中犯了错误,或者bokeh服务器不能按照日志记录工作吗?

import logging
LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(filename = "test.log",
                level = logging.DEBUG,
                format = LOG_FORMAT,
                filemode="w")
logger = logging.getLogger()

那些行是什么意思:from bokeh.iofrom bokeh.layouts,...?它们根本不应该起作用。 - Georgy
我实际上有一段非常长的代码,但我不能在这里分享所有内容。这些是我在代码中使用的库。我编写的代码是结果,我连接到服务器并在该服务器上执行交易。然而,在服务器上执行的操作没有记录在.log文件中。甚至没有一个带有.log扩展名的文件。这是由于日志记录和bokeh之间的不兼容性吗?我不能在bokeh中使用日志记录吗?请不要过于关注那些from行。我没有详细编写它。例如:from bokeh.io import curdoc。每个都有一个延续,但我没有写。 - Gülsay
1
请阅读在什么情况下我可以在我的问题中添加“紧急”或其他类似短语,以便获得更快的答案? - 总结是这不是一个理想的方式来处理志愿者,并且可能会适得其反,导致无法获得答案。请不要在您的问题中添加此内容。 - halfer
请提供一些关于你已经尝试过的信息。你是否尝试在本地运行程序或远程运行程序但没有使用bokeh?你是否尝试为日志文件指定绝对路径?你运行程序的步骤是什么?尝试提供一些最小可重现的示例来暴露相同的问题。 - Georgy
我正在编写shell脚本来运行这段代码:bokeh serve --show "url"。我的目标是将在浏览器中进行的更改保存为.log扩展名。例如,我希望在我的.log扩展名中看到我点击了animate函数。我已经编写了所需的代码作为logger.debug,但这并没有发生。我能否在bokeh中使用logging?我重新编辑了代码,您可以再次检查。 - Gülsay
2个回答

5
当您使用bokeh serve %some_python_file%时,Bokeh服务器会立即启动,但只有在您实际打开指向填写了该代码的Bokeh文档的URL时,才会执行您的代码。 bokeh serve通过使用logging.basicConfig来配置日志记录,再次调用此函数不会覆盖任何内容 - 这就是logging.basicConfig的工作方式。
与其直接使用logging,您应该创建并配置自己的记录器。
LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
file_handler = logging.FileHandler(filename='test.log', mode='w')
file_handler.setFormatter(logging.Formatter(LOG_FORMAT))
logger = logging.getLogger(__name__)
logger.addHandler(file_handler)
logger.setLevel(logging.DEBUG)

logger.info('Hello there')

0

Eugene的回答是正确的。第二次调用logging.basicConfig()没有任何效果。然而,如果您正在使用Python>= 3.8,则可以使用force=True,这将禁用所有现有的日志处理程序并设置一个新的处理程序。实际上,这意味着您自己的logging.basicConfig()将会正常工作:

logging.basicConfig(..., force=True)

文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接