yuicho@brain:~# tail -f /dev/memory

備忘録。このブログについては https://yuicho.hateblo.jp/about を見やがれ。

自分なりのpythonのロギング作法

「自分なり」?

自分なり。

いつもコーディングするときに「ロギングどないしてたんやったかな」ってなるから、メモ。

多分Python本来のお作法とは外れてるけど、んなもん知るかいな。さてはアンチだなオメー。

スタンス

  • 基本的に画面には出力しないが、ロートロガーに流れてきたWARNING以上は出力
  • 設定ファイル(yamlを使うことが多い)でログファイルを指定できるようにしておいて、そこにはINFO以上を出力
  • 実行時に--debugを付けたら、画面に全てのログが出るようにする。

コードはよ。

import logging

# ログ用変数設定
logger = logging.getLogger(__name__)
logformat = logging.Formatter('%(asctime)s %(module)s[%(lineno)d] [%(levelname)s]: %(message)s', '%Y-%m-%d %H:%M:%S')

# ロギング設定
logger.setLevel(logging.DEBUG)
logging.getLogger('').handlers.clear()
disp_handler = logging.StreamHandler()
disp_handler.setLevel(logging.WARNING)
disp_handler.setFormatter(logformat)
logging.getLogger('').addHandler(disp_handler)


def main():
    ~~~ここでごねごね~~~

    nomal_handler = logging.FileHandler(filename=configs['system']['logfile'])
    nomal_handler.setLevel(logging.INFO)
    nomal_handler.setFormatter(logformat)
    logger.addHandler(nomal_handler)

    ~~~しょり~~~


if __name__ == '__main__':

    if '--debug' in sys.argv:
        disp_handler.setLevel(logging.DEBUG)

    try:
        main()
    except:
        logger.critical('********** Exception **********\n%s', traceback.format_exc())
        sys.exit(1)