Kivy - 日誌記錄器



Python 的標準庫包含 logging 模組,該模組有助於在 Python 應用程式中實現強大的事件日誌系統。Kivy 的日誌記錄機制在此基礎上構建,並具有一些額外的功能,例如在支援的終端上進行顏色編碼的輸出、訊息分類等。

每次執行 Kivy 應用程式時,您都會看到控制檯視窗中顯示的日誌。它看起來像這樣:

[INFO  ] [Logger  ] Record log in C:\Users\user\.kivy\logs\kivy_23-07-10_67.txt
[INFO  ] [deps    ] Successfully imported "kivy_deps.gstreamer" 0.3.3
[INFO  ] [deps    ] Successfully imported "kivy_deps.angle" 0.3.3
[INFO  ] [deps    ] Successfully imported "kivy_deps.glew" 0.3.1
[INFO  ] [deps    ] Successfully imported "kivy_deps.sdl2" 0.6.0
[INFO  ] [Kivy    ] v2.2.0
[INFO  ] [Kivy    ] Installed at "c:\kivyenv\Lib\sitepackages\kivy\__init__.py"
[INFO  ] [Python  ] v3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)]
[INFO  ] [Python  ] Interpreter at "c:\kivyenv\Scripts\python.exe"
[INFO  ] [Logger  ] Purge log fired. Processing...
[INFO  ] [Logger  ] Purge finished!
[INFO  ] [Factory ] 190 symbols loaded
[INFO  ] [Image   ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO  ] [Window  ] Provider: sdl2
[INFO  ] [GL      ] Using the "OpenGL" graphics system
[INFO  ] [GL      ] GLEW initialization succeeded
[INFO  ] [GL      ] Backend used <glew>
[INFO  ] [GL      ] OpenGL version <b'4.6.0 - Build 31.0.101.3959'>
[INFO  ] [GL      ] OpenGL vendor <b'Intel'>
[INFO  ] [GL      ] OpenGL renderer <b'Intel(R) Iris(R) Xe Graphics'>
[INFO  ] [GL      ] OpenGL parsed version: 4, 6
[INFO  ] [GL      ] Shading version <b'4.60 - Build 31.0.101.3959'>
[INFO  ] [GL      ] Texture max size <16384>
[INFO  ] [GL      ] Texture max units <32>
[INFO  ] [Window  ] auto add sdl2 input provider
[INFO  ] [Window  ] virtual keyboard not allowed, single mode, not docked
[INFO  ] [Text    ] Provider: sdl2
[INFO  ] [Base    ] Start application main loop
[INFO  ] [GL      ] NPOT texture support is available

這些訊息告訴您已檢測到並初始化了哪些硬體和驅動程式,以及哪些硬體和驅動程式無法完成初始化。

Kivy 庫中的 Logger 類提供了一個單例例項,並在 kivy.logger 模組中定義。除了 Python 的 logging 模組中的日誌級別(debug、info、warning、error 和 critical)之外,Kivy 還具有一個額外的跟蹤級別。

Logger 物件具有與上述日誌級別相對應的方法。這些方法中的每一個都接受一個字串引數 - message - 分為兩部分,用冒號(:)符號分隔。第一部分用作標題,冒號後的字串是日誌訊息。

from kivy.logger import Logger

Logger.info('title: This is a info message.')
Logger.debug('title: This is a debug message.')

預設日誌級別在 Kivy 的配置檔案中設定為 info。因此,您會看到如此長的日誌輸出。您可以透過 Logger 物件的 setlevel() 方法將其設定為任何所需的日誌級別。

from kivy.logger import Logger, LOG_LEVELS

Logger.setLevel(LOG_LEVELS["debug"])

Kivy 的日誌記錄機制由環境變數 KIVY_LOG_MODE 控制,該變數具有三個可能的值:KIVY、PYTHON、MIXED。

預設的 KIVY_LOG_MODE 是 KIVY,因此係統中的所有日誌訊息都輸出到 Kivy 日誌檔案和控制檯。

如果將其設定為 PYTHON 模式,則不會新增任何處理程式,並且不會捕獲 sys.stderr 輸出。客戶端可以自行新增合適的處理程式。

在 MIXED 模式下,處理程式直接新增到 Kivy 的 Logger 物件,並且關閉傳播。sys.stderr 未重定向。

所有與日誌記錄相關的配置引數都可以在 config.ini 檔案的 [Kivy] 部分中找到。引數及其預設值如下:

log_dir = logs
log_enable = 1
log_level = info
log_name = kivy_%y-%m-%d_%_.txt
log_maxfiles = 100

請注意,即使未啟用日誌記錄器,您也可以訪問最後 100 個 LogRecords。

from kivy.logger import LoggerHistory
print(LoggerHistory.history)
廣告