teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

投稿文が古かったので更新

2021/07/07 15:29

投稿

fukasawah
fukasawah

スコア147

answer CHANGED
@@ -6,4 +6,14 @@
6
6
 
7
7
  なので同じロガーに対して、 logger.addHandler(handler) を2度呼び出すと2回ハンドラーで処理されることになります。
8
8
  実際にやっている箇所は、if-elif-else文のいずれかで1回目、終了メッセージの前に2回目ですね
9
- なので、終了メッセージだけ2回表示されています。
9
+ なので、終了メッセージだけ2回表示されています。
10
+
11
+ 初期化作業はプログラム全体で1回だけ呼び出されるように修正すればよいかと思います。
12
+ その代わり、ロガーを使う側はgetLogger()のみ行うようにします。
13
+
14
+ ロガーを使う側は初期化の方式が選べなくなりますが、逆を言えば初期化に気にすることなく使えるようになります。
15
+ それでも、もし選びたい場合は、ロガーを初期化するときとロガーを使う時でgetLogger("mylogger1")、getLogger("mylogger2")等のように別名で呼び出せばよいかと思います。
16
+
17
+ ただ、pythonのloggingのロガーは他のライブラリでも使われる想定で作られており、モジュール毎に出力をコントロールするなどの機能が備わったりしています。
18
+ そのため、この挙動を理解しておかないと、うっかり他のモジュールで使われている名前を使ってしまい、急に他のモジュールのログが出てくるなどの思わぬ動作をしてびっくりするかもしれません。
19
+ なので、できれば理解して使うことをお勧めします。