3

Pythonのロギングモジュールを使用しています。

単体テスト (py.test を使用) の場合、テストが起動されるたびに、いくつかのログ情報が特定のファイルに送られます。統合サーバーでは、誰かがコードをプッシュするたびに (私たちも git を使用します:) テストを実行します。

問題は、ユーザー B がテストを実行しようとしたときにユーザー A によってファイルが作成されると、ユーザー B には同じファイルに書き込む権限がないため、テストが失敗することです。

これまでのところ、ファイルのアクセス許可を手動で変更しましたが、汚い解決策のように見えます。また、ユーザーごとにログ ファイルを作成することも考えましたが、これも適切ではありません。

テストでログを記録するためのコードは次のとおりです。

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
    datefmt='%m-%d %H:%M',
    filename='/tmp/py.test.log',
    filemode='w')
log.setLevel(logging.DEBUG)
log.addHandler(logging.StreamHandler())

この問題を回避する方法はありますか? 多分 filemode = 'a' を使用することでそれができるかもしれませんが、毎回新しいファイルが必要だと仮定しましょう (正直なところ、これは実際の問題よりも好奇心ですが、それでも正しくやりたいと思っています)

ありがとう :)

4

3 に答える 3

5

ロギング プロセスが、別のユーザーが所有する既存のファイルの上に書き込もうとしているようです。loggroupディレクトリへのグループ アクセスをグループに許可する手順は次のとおりですlogdir

  1. 含まれているディレクトリをグループ書き込み可能にします。

    $ chgrp loggroup logdir
    $ chmod g+w logdir
    
  2. setgidビットをオンに設定しlogdirます。logdirこれにより、常にグループが所有する新しいファイルが作成されます。それ以外の場合、新しいファイルは作成者のグループによって所有されます。

    $ chmod g+s logdir
    
  3. すべてのロギング ユーザーが に属していることを確認しますloggroup

    $ usermod -a -G loggroup myuser
    
  4. すべての書き込みプロセスに適切な umask があることを確認して、新しく作成されたファイルをグループ書き込み可能にできるようにします。

    $ umask 0002
    
  5. グループのすべてのメンバーがloggroupファイルを作成しlogdir、互いのファイルを上書きできるようになりました。

于 2012-10-29T05:26:45.537 に答える
0

ファイル名の一部として git ハッシュを使用できます。次に、ログに奇妙なメッセージがあった場合、どのバージョンが原因であるかがわかります。

もう 1 つの可能性は、別のディレクトリまたは chroot からテストを実行することです。

アクセス許可を変更したり、ファイルを削除したりすることもできますが、2 人以上のユーザーが同時にテストを実行すると、ログ ファイルが乱雑になります。

コンテンツを気にしない場合、またはデータベースにログを記録する場合は何もログに記録しないロガーを作成することもできます...実際、正しい/最良の答えは状況によって異なります

于 2012-10-29T03:45:10.677 に答える
-2
import os
os.chmod("/some/location/file.type", 0777)

私が推測する作成されたファイルに対してこれを行うことができます。ここで、0777 は 8 進数のアクセス許可です。好きなように変更できます。

于 2015-05-16T18:21:16.747 に答える