私は以下の構造を有する小型のPythonプロジェクトに取り組んでいる - 次のように私はプロジェクトの下__init.py__
にロギング設定を設定したPythonのロギング - 複数のモジュール
project
-- logs
-- project
__init.py__
classA.py
classB.py
utils.py
-- main.py
:
import logging
from logging import StreamHandler
from logging.handlers import RotatingFileHandler
# Create the Logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Create the Handler for logging data to a file
logger_handler = RotatingFileHandler('logs\\mylog.log', maxBytes=1024, backupCount=5)
logger_handler.setLevel(logging.INFO)
#Create the Handler for logging data to console.
console_handler = StreamHandler()
console_handler.setLevel(logging.INFO)
# Create a Formatter for formatting the log messages
logger_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
# Add the Formatter to the Handler
logger_handler.setFormatter(logger_formatter)
console_handler.setFormatter(logger_formatter)
# Add the Handler to the Logger
logger.addHandler(logger_handler)
logger.addHandler(console_handler)
を
このように設定すると、プロジェクトレベル全体ではなく、パッケージレベルでルートロガーを設定するように見えます。結果として、main.py
のログされたステートメントはログファイルには表示されませんが、classA
とclassB
とutils.py
の2つのクラスのすべてのログステートメントは、コンソールとログファイルに期待どおりにルーティングされます。
ログを一度設定してプロジェクト全体で使用できるようにするにはどうすればよいですか?私は、logging.py設定をmain.pyに移そうとしましたが、動作していないようです。
def setupLogging():
# Create the Logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
..etc..
def main():
setupLogging()
if __name__ == "__main__":
main()
こんにちは、助言に感謝を。出来た!私はしかし、フォローアップの質問があります。この方法でルートロガーを設定すると、インポートされた他のモジュールのレベルが設定されているようになり、ログファイルにサードパーティのインポートされたモジュールからもメッセージが届くようになります。私が書いたモジュールからのみメッセージを記録するには? – theguyoverthere
それぞれのレベルを設定することができます。 'logging.getLogger(" product ")。setLevel(logging.INFO)'または 'logging.getLogger(" numpy ")。setLevel(logging.DEBUG)'です。ただし、ロギング設定ファイルを使用する方が簡単です(https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig) – zvone