在文章《Python 日志模塊 logging 的使用》里介紹了利用 logging 模塊日志按層級(jí)傳遞,并所有日志都會(huì)傳遞到 root Logger 的機(jī)制,實(shí)現(xiàn)在主程序接收和處理模塊日志的方法。但是要注意這個(gè)方法只適用于明確知道自己程序?qū)氲牡谌桨鼪]有用 logging 模塊的情景,否則會(huì)將第三方包產(chǎn)生的日志也接收。
我就因?yàn)檫@樣操作導(dǎo)致程序接收了 tensorflow 的日志,但是由于我程序的日志添加了一個(gè)自定義的屬性并用 Filter 根據(jù)這個(gè)屬性過濾,而 tensorflow 日志沒有這個(gè)屬性,導(dǎo)致程序運(yùn)行報(bào)錯(cuò)。所以這種方案,如果沒確定好第三方包的情況,輕則接收到不想要的日志,重則程序出問題。
因此,建議不要使用 root Logger。而是自己給程序所有 Logger 根據(jù)希望的日志傳遞需要起名字,比如主程序的 Logger 起名為 "WGSpipeline" 那么質(zhì)控模塊的 Logger 可以起名為 "WGSpipeline.QC",這樣日志能從質(zhì)控模塊傳遞給主程序。