使用する必要があるモジュールをインポートした後、余分なログ メッセージが表示されます。私はこれが起こらないようにするための正しい方法を見つけようとしています。次のコードは、問題を最もよく示しています。
import os
import logging
import flickrapi
class someObject:
def __init__(self):
self.value = 1
logger = logging.getLogger(__name__)
print logger.handlers
logger.info("value = " + str(self.value))
def main():
# Set up logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)-15s] %(name)-8s %(levelname)-6s %message)s')
fh = logging.FileHandler(os.path.splitext(os.path.basename(__file__))[0]+".log")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.debug("Debug message")
logger.info("Info message")
thingy = someObject()
if __name__ == "__main__":
main()
flickrapi インポートを使用すると、次の出力が表示されます。
DEBUG:__main__:Debug message
[2013-05-03 12:10:47,755] __main__ INFO Info message
INFO:__main__:Info message
[<logging.FileHandler instance at 0x1676dd0>, <logging.StreamHandler instance at 0x1676ea8>]
[2013-05-03 12:10:47,755] __main__ INFO value = 1
INFO:__main__:value = 1
flickrapi のインポートを削除すると、正しい出力が表示されます。
[2013-05-03 12:10:47,755] __main__ INFO Info message
[<logging.FileHandler instance at 0x1676dd0>, <logging.StreamHandler instance at 0x1676ea8>]
[2013-05-03 12:10:47,755] __main__ INFO value = 1
ロギングを使用するのはこれが初めてで、少し困惑しています。ドキュメントを数回読みましたが、理解に何かが欠けていると思います。
を見るとlogging.Logger.manager.loggerDict
、他のロガーがありますが、それぞれ.handlers
が空です。ロガーには__main__
私が追加した 2 つのハンドラーしかありませんが、これらのメッセージはどこから来るのでしょうか?
私が壁にぶつかったので、これをどのように解決できるかについての指針は大歓迎です。
ありがとう