2013-01-16 8 views
18

私はdjango 1.4.2アプリケーションのログを回転するファイルに書き出しました。私のsettings.pyで 私が持っている:Djangoログの回転とログファイルの所有権

LOGGING = { 
'version': 1, 
'disable_existing_loggers': True, 
'formatters': { 
    'standard': { 
     'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' 
    }, 
}, 
'handlers': { 
    'default': { 
     'level':'DEBUG', 
     'class':'logging.handlers.RotatingFileHandler', 
     'filename': '/var/www/html/logs/mylog.log', 
     'maxBytes': 1024*1024*5, # 5 MB 
     'backupCount': 5, 
     'formatter':'standard', 
    }, 
    'request_handler': { 
      'level':'DEBUG', 
      'class':'logging.handlers.RotatingFileHandler', 
      'filename': '/var/www/html/logs/django_request.log', 
      'maxBytes': 1024*1024*5, # 5 MB 
      'backupCount': 5, 
      'formatter':'standard', 
    }, 
}, 
'loggers': { 
    '': { 
     'handlers': ['default'], 
     'level': 'ERROR', 
     'propagate': True 
    }, 
    'django.request': { # Stop SQL debug from logging to main logger 
     'handlers': ['request_handler'], 
     'level': 'DEBUG', 
     'propagate': False 
    }, 
} 

}

だからログディレクトリに、私は、ファイルを参照してください。mc.logは500万に達すると

mc.log 
mc.log.1 
mc.log.2 
mc.log.3 
mc.log.4 
mc.log.5 

ファイルが正しく回転しているが、新しいmc.logは所有権root.rootで作成されます。 apacheはApacheユーザーのもとで実行されているため、ファイルにアクセスできなくなり、アプリケーションの動作が停止します。 apache.apacheの代わりにroot.rootの所有権を使って新しいログを作成する理由は何ですか?

ありがとうございました

+2

この現象もあります。あなたはそれを理解したことがありますか? – fluffels

答えて

8

親ディレクトリのユーザー/グループが許可する場合、新しいファイルを作成できます。私はあなたがディレクトリの所有者を変更するか、またはApacheのユーザーを含むディレクトリにグループを追加するか、ACLなどの高度な技術を使用する必要があると考えています。

これをテストするには、次の手順を実行します。rootとしてログインします。 apacheユーザーに切り替えます。手動でファイルを作成してみてください。 rootに戻って、フォルダのパーミッション/所有権を変更し、apacheユーザに切り替えて、もう一度やり直してください。これは、ファイルを作成しようとしている間にスクリプトが失敗するかどうかについていくつかの情報を提供するはずです。

最後に、直感的ではないですが、Apacheのユーザーがどういうわけかそのディレクトリに実行権限を持っていることを確認してください。そうしないと、cdできなくなります。

また、ディレクトリの "s"ビット(chmod g+sまたはchmod 2755など)を設定して、新しく追加されたファイルがそのディレクトリのアクセス権を継承する必要があると思います。次に、グループのビットが設定され、グループがそのディレクトリを所有していることを確認する必要があります。 (または、ディレクトリのグループをwww-dataに設定できます)。

関連する問題