logging包Debug方法失效:Kivy表单数据无法写入myapp.log
解决Kivy中execute函数无法写入日志文件的问题
看起来你的问题出在logging.basicConfig的调用时机上,让我给你拆解一下:
问题根源
logging.basicConfig() 这个函数只有在第一次被调用时才会生效,后续的调用都会被直接忽略。你的代码里每次触发execute函数都会调用它,这就导致只有第一次执行时日志配置会被初始化,但如果后续重复触发(比如多次点击按钮),日志配置不会被重新加载;甚至如果程序在调用execute前已经有其他地方初始化了日志系统,basicConfig也完全不会生效,日志可能只会输出到默认控制台而非文件。
修复方案
把日志的配置代码移到函数外部,在程序启动时就完成初始化,而不是每次执行execute都重复调用。修改后的代码如下:
import logging import selenium from kivy.app import App from kivy.uix.gridlayout import GridLayout # 提前配置日志,只在程序启动时执行一次 logging.basicConfig( filename="myapp.log", level=logging.DEBUG, format='%(asctime)s:%(message)s' ) class UIf(GridLayout): def execute(self, *args): print("First probe") print("Second probe") for name in args: print("Third probe") logging.debug(name) class MyApp(App): def build(self): return UIf() if __name__ == '__main__': runapp = MyApp() runapp.run()
额外排查点
如果修改后还是无法写入日志,可以检查这几点:
- 确认程序运行的当前目录是否有权限创建和写入文件(比如某些系统下的受限目录需要特殊权限)
- 查看
myapp.log是否生成在程序的当前工作目录下,而不是你预期的路径(可以用import os; print(os.getcwd())打印当前目录确认) - 再次确认
args确实包含有效数据(你已经用print("Third probe")验证过这一点,所以这个可能性较低)
内容的提问来源于stack exchange,提问作者Aakash Hirve
相关产品推荐
相关产品推荐

