自分なりの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)