2017-08-31 11 views
0

ログファイルがPython 2 logging moduleでどのように動作するかを理解しようとしています。Python 2でカスタムロギングLinuxファイルパスを指定する

私は私のようなもの使用してテキストファイルにログ出力を保存することができます知っている:それは上のドキュメントから私にははっきりしていない

logging.basicConfig(filename='example.log',level=logging.DEBUG) 

を:

  1. 絶対かどうかfilenameパスが有効
  2. の相対的なパスを指定するための適切な構文(../example.log有効です)。絶対パスと相対パスの両方を使用して - 私は/home/bobからこのスクリプトを実行すると

、どのように私は私が代わりに/tmpディレクトリに保存されたログファイルを望んでいることを指定するのですか?

logging.basicConfig(filename='../../tmp/example.log')は有効ですか?

同様に、logging.basicConfig(filename='/tmp/example.log')は有効ですか?

答えて

2

ファイル名だけを指定すると、現在のディレクトリにに書き込まれます。あなたがチェックすることができ 使用してPythonのIDLEその

>>> import logging 
>>> logging.basicConfig(filename='relative.log') 
>>> logging.info('test') 

C:\Python27\relative.log 

私の作業ディレクトリがPython27ある、と私は私のログに記録されたメッセージであり、ファイルの名前relative.logを持って次のように。

ファイルの場所を../relative.logに変更すると、Python27の親ディレクトリに新しいファイルが作成されます。だから、相対パスは、ロギングのための作業を行います。明示的なが暗黙的よりも優れているとして絶対パスを使用することが常に優れている

>>> logging.basicConfig(filename=r'c:\abs_path.log') 
>>> logging.info('test') 

C:\abs_path.log 

>>> import logging 
>>> logging.basicConfig(filename='../relative.log') 
>>> logging.info('test123') 

C:\relative.log 

そしてloggingモジュールも絶対パスをサポートしています

+0

ありがとうございます - これは間違いなく間違った質問です。絶対パスはLinux環境でも動作することを確認しました。 – alex

+0

Windowsプラットフォームで実行している場合は、パスを書き込む前にrawに 'r'を追加する必要があります。そうでなければ、パス内のすべてのスラッシュをエスケープしない限りエラーになります – Vinny

1

これらはどちらも有効です。しかし、相対パス(with ..)は、実行するディレクトリに応じて異なるファイルを選択します。

logger.py/home/user/projects/pythonに実行し、ファイル名が../log.txtの場合、ファイルは/home/user/projectsに保存されます。一方、/home/userでスクリプトを実行すると、log.txt/home/に保存されます。

絶対パスは常に機能し、より信頼性が高くなります。現在のディレクトリにファイルが必要な場合は、次の方法をお勧めします。

basedir = os.path.abspath(os.path.dirname(__file__)) 
filename = os.path.join(basedir, 'file.txt') 
関連する問題