2012-02-28 16 views
1

夜間の変換とオーディオデータのアーカイブを処理するsmall-ish Pythonスクリプトを書きました。途中で予期せぬ問題(存在しないファイル、データベースサーバへの信頼性の低い接続など)があったため、私はPythonの独自のロギング機能を追加して、発生した問題を追跡しました。Pythonのlogging.FileHandlerを構成する正しい方法は何ですか?

問題は、スクリプトが実行されている場所(現在の作業ディレクトリなど)にログファイルが作成されるため、私はhomedir(スクリプトがcronによって実行されるときに使用される)とログファイルスクリプトの独自のディレクトリ(私はそれをデバッグするときに使用されます)。私は多くの場合、スクリプトと同じディレクトリにログファイルと設定ファイルを保存することをお勧めします。

私はここにロガーの設定をロードしています:

logging.config.fileConfig(os.path.join(sys.path[0], 'logger.conf')) 

を...と、ここに私のlogger.confの関連部分である:

[handler_fileHandler] 
class=FileHandler 
level=DEBUG 
formatter=fileFormatter 
args=('echi_export.log', 'a',) 

絶対パス仕事を、私はビットを使用することには消極的です。

要するに、Pythonのloggerモジュール(特にFileHandler)を使用してファイルロギングを設定する適切な方法は何ですか?実際の例では十分です。だから、

+0

あなたがそれを理解したように見えます。 FWIW、私はしばしば、単にStreamHandlerを標準出力に使うほうが簡単だと分かります。デバッグのために、私は通常、stdoutで出力を見たいと思っています。そして、cron上で、あなたが望むファイルにパイプすることができます(混乱を避けるため絶対パスを使用します)。好みの問題。 – danny

+0

cronでstdout/stderrを配管することは、あまり複雑ではありません。 – Halka

+0

答えを見つけたら*答えとして*を加えてそれを受け入れる方が良いです:そのようにして、質問は未回答のままぶら下がりません。 –

答えて

1

、コンフィギュレーションファイル内どうやら私でき使用Pythonの表現:。

[handler_fileHandler] 
    <snip> 
args=(os.path.join(sys.path[0],'echi_export.log'), 'a',) 

これは、スクリプトが常駐同じディレクトリに作成されたログファイルになり

os.path.dirname(__file__)がに解決私のシステム上の/usr/lib/python2.7/logging/、おそらくロギングモジュールがある場所です)。