ログ構成をコードからlogging.conf
ファイルに抽出することを計画しています。しかし、その振る舞いは互いに異なっているようです。
現在の単純なハードコードされたケースは次のとおりです。
import sys
import logging
import logging.handlers
# loggers
root = logging.getLogger()
mylogger = logging.getLogger("mylogger")
# handler
consoleHandler = logging.StreamHandler(sys.stderr)
# formatter
simpleFormatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# config
consoleHandler.setLevel(logging.INFO)
consoleHandler.setFormatter(simpleFormatter)
root.setLevel(logging.INFO)
root.addHandler(consoleHandler)
if __name__ == '__main__':
mylogger.debug("mylogger debug")
mylogger.info("mylogger info")
mylogger.warning("mylogger warning")
mylogger.error("mylogger error")
root.debug("root debug")
root.info("root info")
root.warning("root warning")
root.error("root error")
そして、(おそらく)同等の構成を使用するlogging.conf
と、次のようになります。
import logging
import logging.config
# loggers
root = logging.getLogger()
mylogger = logging.getLogger("mylogger")
if __name__ == '__main__':
# load configuration from a file
logging.config.fileConfig("logging.conf")
mylogger.debug("mylogger debug")
mylogger.info("mylogger info")
mylogger.warning("mylogger warning")
mylogger.error("mylogger error")
root.debug("root debug")
root.info("root info")
root.warning("root warning")
root.error("root error")
logging.conf
は:
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=INFO
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
args=(sys.stderr,)
level=INFO
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
以前の出力には、次のログが含まれmylogger
ます。
2013-10-19 21:36:05,866 - mylogger - INFO - mylogger info
2013-10-19 21:36:05,866 - mylogger - WARNING - mylogger warning
2013-10-19 21:36:05,866 - mylogger - ERROR - mylogger error
2013-10-19 21:36:05,866 - root - INFO - root info
2013-10-19 21:36:05,866 - root - WARNING - root warning
2013-10-19 21:36:05,866 - root - ERROR - root error
、しかし後者の 1 つには からのログは含まれませんmylogger
:
2013-10-19 21:38:39,753 - root - INFO - root info
2013-10-19 21:38:39,753 - root - WARNING - root warning
2013-10-19 21:38:39,753 - root - ERROR - root error
私の実際のプロジェクトでは、ロガー オブジェクトlogger = logging.getLogger (__name__)
はlogging.conf
.
前者の場合と同じ出力を得るために、後者の例を修正する良い方法はありますか?
ありがとう。