コンソールとファイルに、別々のメッセージ書式で、別々の状況に応じた ログ出力を行わせたいとしましょう。例えば DEBUG よりも高いレベルの メッセージはファイルに記録し、INFO 以上のレベルのメッセージは コンソールに出力したいという場合です。また、ファイルにはタイムスタンプを 記録し、コンソールには出力しないとします。以下のようにすれば、こうした 挙動を実現できます:
import logging # set up logging to file - see previous section for more details logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M', filename='/temp/myapp.log', filemode='w') # define a Handler which writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') # tell the handler to use this format console.setFormatter(formatter) # add the handler to the root logger logging.getLogger('').addHandler(console) # Now, we can log to the root logger, or any other logger. First the root... logging.info('Jackdaws love my big sphinx of quartz.') # Now, define a couple of other loggers which might represent areas in your # application: logger1 = logging.getLogger('myapp.area1') logger2 = logging.getLogger('myapp.area2') logger1.debug('Quick zephyrs blow, vexing daft Jim.') logger1.info('How quickly daft jumping zebras vex.') logger2.warning('Jail zesty vixen who grabbed pay from quack.') logger2.error('The five boxing wizards jump quickly.')
このスクリプトを実行すると、コンソールには以下のように表示されるでしょう:
root : INFO Jackdaws love my big sphinx of quartz. myapp.area1 : INFO How quickly daft jumping zebras vex. myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack. myapp.area2 : ERROR The five boxing wizards jump quickly.
そして、ファイルは以下のようになるはずです:
10-22 22:19 root INFO Jackdaws love my big sphinx of quartz. 10-22 22:19 myapp.area1 DEBUG Quick zephyrs blow, vexing daft Jim. 10-22 22:19 myapp.area1 INFO How quickly daft jumping zebras vex. 10-22 22:19 myapp.area2 WARNING Jail zesty vixen who grabbed pay from quack. 10-22 22:19 myapp.area2 ERROR The five boxing wizards jump quickly.
ご覧のように、 DEBUG メッセージはファイルだけに出力され、その他のメッセージ は両方に出力されます。
この例題では、コンソールとファイルのハンドラだけを使っていますが、 実際には任意の数のハンドラや組み合わせを使えます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。