私はSLF4JとLog4Jから来ているので、私はPythonでどのようにロギングが動作するのかわかりません。Pythonでのロガー設定のロギングと継承
私はmod.py
import logging
def foo():
log = logging.getLogger (__name__)
log.debug ('Hello from the module')
-----
---- logging.yaml
version: 1
handlers:
console:
class: logging.StreamHandler
level: DEBUG
stream: ext://sys.stderr
formatter: simpleFormatter
file:
class: logging.FileHandler
filename: app.log
mode: w
level: DEBUG
formatter: simpleFormatter
formatters:
simpleFormatter:
#class: !!python/name:logging.Formatter
#class: logging.Formatter
format: '%(name)s %(asctime)s %(levelname)s %(message)s'
datefmt: '%d/%m/%Y %H:%M:%S'
root:
level: INFO
handlers: [console, file]
mod:
level: DEBUG
を以下している---- main.py
from logging.config import dictConfig
import yaml
with open ('logging.yaml') as flog:
dictConfig (yaml.load (flog))
import logging
from mod import foo
if __name__ == '__main__':
log = logging.getLogger (__name__)
log.debug ('Hello from main')
foo()
上記の設定では、メッセージ'Hello from the module'
。代わりに、何も印刷されません。ルートロガーにDEBUG
を設定すると、両方のメッセージが出力されます。
したがって、上部ロガーに転送されるメッセージはありませんか? mod
ロガーがroot
の子ではありませんか? mod
ロガーはhandlers
の設定を継承していませんか? (私はをmod
に繰り返そうとしましたが、何も変わりません)。
デフォルトのレベルはINFO
、このモジュールとサブモジュールのレベルはDEBUG
、すべてがroot
のハンドラに移動しますか?
私はちょうどこれをここに入れます:https://www.python.org/dev/peps/pep-0008/ – jonrsharpe