2
我試圖過濾通過UDP傳遞的Python日誌記錄消息,但由於某種原因,在接收端設置loglevel似乎不會影響傳入的消息。Python上的UDP記錄忽略setLevel()
接收端的代碼如下:
import cPickle
import logging
import socket
logging.basicConfig(format='%(asctime)s %(levelname)-8s %(message)s')
logger = logging.getLogger()
logger.setLevel(logging.INFO)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 51010))
while True:
d, _ = s.recvfrom(1024)
log = cPickle.loads(d[4:])
logger.handle(logging.makeLogRecord(log))
儘管我已經設置日誌記錄級別爲logging.INFO,我仍然看到調試消息的事實。如果我while循環前添加
logging.debug("Debug")
logging.info("Info")
,我看到信息的消息,但沒有調試一個,表明setLevel正在本地,但不影響過來UDP套接字消息。
任何想法,爲什麼會發生這種情況?如果我手動檢查收到的字典的'levelno'字段(然後變成日誌記錄),它是10(調試),但過濾似乎並不在意...
謝謝!
編輯:
作爲參考,碼生成通過UDP被髮送的數據包是簡單地
import logging
import logging.handlers
import time
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s')
logging.getLogger().addHandler(logging.handlers.DatagramHandler('', 51010))
while True:
logging.debug("This shouldn't show up")
logging.info("This should show up")
time.sleep(3)
完美的作品!非常感謝你。 (然後我再也不感到驚訝......我知道你的名字看起來很熟悉,花了我一點時間來弄清楚爲什麼!) – ryantmer