2013-01-16 9 views
18

Ich habe eine Django 1.4.2 Anwendungsprotokollierung auf eine rotierende Dateien gehen. In meinem settings.py ich habe:Django Protokoll rotierende und Protokolldatei Besitz

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 
    }, 
} 

}

So in dem Logging-Verzeichnis sehe ich die Dateien:

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

Wenn mc.log 5M erreicht die Dateien korrekt gedreht werden, aber Das neue mc.log wird mit dem Eigentümer root.root erstellt. Da Apache unter Apache-Benutzer ausgeführt wird, kann nicht mehr auf die Dateien zugegriffen werden und die Anwendung funktioniert nicht mehr. Irgendeine Idee, warum das neue Protokoll mit root.root-Besitz anstelle von apache.apache erstellt wird?

Dank

+2

Ich sehe dieses Verhalten auch. Hast du es jemals herausgefunden? – fluffels

Antwort

8

Neue Dateien können, wenn das Verzeichnis ermöglicht es Benutzern/Gruppen des Mutter erstellt werden. Ich glaube, Sie müssen entweder den Besitzer des Verzeichnisses ändern oder eine Gruppe zu dem Verzeichnis hinzufügen, das Apache-Benutzer enthält, oder eine fortgeschrittene Technik wie ACL verwenden.

Um es zu testen, versuchen Sie Folgendes: Melden Sie sich als root an. Wechseln Sie zu Apache-Benutzer. Versuchen Sie, eine Datei manuell zu erstellen. Wechseln Sie zurück zum root, ändern Sie die Berechtigungen/den Besitz des Ordners, wechseln Sie zum Apache-Benutzer, versuchen Sie es erneut. Dies sollte Ihnen weitere Informationen darüber geben, ob das Skript beim Erstellen der Datei fehlschlägt.

Schließlich ist es ein wenig kontraintuitiv, stellen Sie sicher, dass Apache-Benutzer irgendwie die Berechtigung zum Ausführen in diesem Verzeichnis hat, sonst wird es Ihnen nicht erlauben, in das zu cd.

Auch ich denke, Sie müssen das "s" -Bit des Verzeichnisses (chmod g+s oder chmod 2755 etc), so dass neu hinzugefügte Dateien übernehmen die Berechtigungen des Verzeichnisses. Dann müssen Sie sicherstellen, dass das s-Bit der Gruppe gesetzt ist und die Gruppe das Verzeichnis besitzt. (oder Sie können die Gruppe des Verzeichnisses auf www-data setzen).