UDP 経由で送信される Python ログ メッセージをフィルタリングしようとしていますが、何らかの理由で、受信側でログレベルを設定しても受信メッセージに影響がないようです。
受信側のコードは次のとおりです。
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 に設定したにもかかわらず、まだデバッグ メッセージが表示されます。追加すると
logging.debug("Debug")
logging.info("Info")
while ループの前に、情報メッセージが表示されますが、デバッグ メッセージは表示されず、setLevel がローカルで動作していることを示していますが、UDP ソケット経由で受信するメッセージには影響しません。
なぜこれが起こるのでしょうか?受信した dict の「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)