0

ログ構成をコードから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.

前者の場合と同じ出力を得るために、後者の例を修正する良い方法はありますか?

ありがとう。

4

1 に答える 1

0

Python 2.6 以降を使用している場合はlogging.config.fileConfig()、追加のキーワード引数を指定して呼び出す必要がdisable_existing_loggers=Falseあります (デフォルトはTrue下位互換性を維持するためですが、そのデフォルトを使用する理由は他にありません)。

がないdisable_existing_loggers=Falseと、 が呼び出されたときに既存のロガーfileConfig()は無効になります。ただし、それらまたはその祖先が構成で指定されている場合を除きます。

于 2013-10-19T16:30:02.867 に答える