Pythonでは、複数のpyファイルのloggingを同じログlogファイルに出力する方法
Pythonでは、複数のpyファイルのloggingを同じログlogファイルに出力する方法
転載:https://www.crifan.com/python_output_multiple_script_logging_into_single_log_file/
【問題】
比較的長いpythonスクリプトファイルがあり、logログ出力についてはloggingが使用され、対応する初期化コードは:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
そしてlogging.info,logging.debugなどは対応するログファイルBlogToWordpressにログを入力することができる.ロゴが当たった.
現在、このファイルは大きすぎるため、メインファイルBlogToWordpressに分けられています.pyとBlogNeteaseのような複数のサブファイル.py,crifanLib.pyなど.
分割された後、サブファイルのlog出力では、直接loggingを使用できないようです.
それからprintしか使えなくて、とても不快です.
サブファイルのloggingとプライマリファイルのloggingの出力は、同じlogファイル、すなわちプライマリファイルが生成したそのlogファイルに出力されることが望ましい.
【解決プロセス】
1.pyモジュールがサブモジュールとして呼び出される前の初期化を理解したばかりであるため:
【解決済み】Pythonでは、モジュールをインポートする前に、どのように初期化するか
まず,サブモジュール初期化においても同様にloggingを用い,独自のloggingファイルを個別に生成し,テストコードは以下の通りである.
?
1
2
3
4
5
6
7
8
9
10
11
12
テストの結果は奇妙で、サブファイルが再構成されたloggingのようで、メインファイルのloggingファイルをハイジャックし、次の出力は、サブファイルのlogファイルに出力されました.これは私が望んでいるものではありません.pyファイルごとに独自のlogファイルがあります.
2.その後、サブファイルについては、複数の残高外設定は全く必要なく、次のようにします.
import logging;
次にloggingを直接使用する.info,logging.debug関数は、ログの内容を出力、具体的な出力の形式は、メインファイル用loggingに依存する.basicConfigが構成した形式.入力した場所、すなわちメインファイルのlogファイル.
これにより、少なくとも、複数のpyファイルのloggingコンテンツを同じプライマリファイルのlogファイルに出力し、フォーマットが設定され、統一されることが好適に実現される.
【まとめ】マスターファイルにloggingを設定.basicConfig関連パラメータ、StreamHandlerなどを構成した後、サブファイルは、loggingモジュールをインポートしてloggingを呼び出すだけです.info,logging.debug関数は、log情報をプライマリファイルのlogに入力することを実現します.
転載:https://www.crifan.com/python_output_multiple_script_logging_into_single_log_file/
【問題】
比較的長いpythonスクリプトファイルがあり、logログ出力についてはloggingが使用され、対応する初期化コードは:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
logging.basicConfig(
level
=
logging.DEBUG,
format
=
'LINE %(lineno)-4d %(levelname)-8s %(message)s'
,
datefmt
=
'%m-%d %H:%M'
,
filename
=
scriptSelfName
+
".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(
'LINE %(lineno)-4d : %(levelname)-8s %(message)s'
);
# tell the handler to use this format
console.setFormatter(formatter);
logging.getLogger('').addHandler(console);
そしてlogging.info,logging.debugなどは対応するログファイルBlogToWordpressにログを入力することができる.ロゴが当たった.
現在、このファイルは大きすぎるため、メインファイルBlogToWordpressに分けられています.pyとBlogNeteaseのような複数のサブファイル.py,crifanLib.pyなど.
分割された後、サブファイルのlog出力では、直接loggingを使用できないようです.
それからprintしか使えなくて、とても不快です.
サブファイルのloggingとプライマリファイルのloggingの出力は、同じlogファイル、すなわちプライマリファイルが生成したそのlogファイルに出力されることが望ましい.
【解決プロセス】
1.pyモジュールがサブモジュールとして呼び出される前の初期化を理解したばかりであるため:
【解決済み】Pythonでは、モジュールをインポートする前に、どのように初期化するか
まず,サブモジュール初期化においても同様にloggingを用い,独自のloggingファイルを個別に生成し,テストコードは以下の通りである.
?
1
2
3
4
5
6
7
8
9
10
11
12
#------------------------------------------------------------------------------
if
__name__
=
=
"BlogNetease"
:
print
"BlogNetease is imported from others"
;
logging.basicConfig(
level
=
logging.DEBUG,
filename
=
"BlogNetease.log"
,
filemode
=
'w'
,
);
logging.info(
"logging output info from BlogNetease is OK ."
);
print
"BlogNetease import end"
;
テストの結果は奇妙で、サブファイルが再構成されたloggingのようで、メインファイルのloggingファイルをハイジャックし、次の出力は、サブファイルのlogファイルに出力されました.これは私が望んでいるものではありません.pyファイルごとに独自のlogファイルがあります.
2.その後、サブファイルについては、複数の残高外設定は全く必要なく、次のようにします.
import logging;
次にloggingを直接使用する.info,logging.debug関数は、ログの内容を出力、具体的な出力の形式は、メインファイル用loggingに依存する.basicConfigが構成した形式.入力した場所、すなわちメインファイルのlogファイル.
これにより、少なくとも、複数のpyファイルのloggingコンテンツを同じプライマリファイルのlogファイルに出力し、フォーマットが設定され、統一されることが好適に実現される.
【まとめ】マスターファイルにloggingを設定.basicConfig関連パラメータ、StreamHandlerなどを構成した後、サブファイルは、loggingモジュールをインポートしてloggingを呼び出すだけです.info,logging.debug関数は、log情報をプライマリファイルのlogに入力することを実現します.