我有一个django 1.4.2应用程序记录转到旋转文件。 在我的settings.py中,我有:
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
mc.log.1
mc.log.2
mc.log.3
mc.log.4
mc.log.5
当mc.log达到5M时,文件被正确旋转,但新的mc.log是使用所有权root.root创建的。 由于apache在apache用户下运行,因此无法再访问文件并且应用程序停止工作。 知道为什么使用root.root所有权而不是apache.apache创建新日志?
由于
答案 0 :(得分:8)
如果父目录的用户/组允许,则可以创建新文件。我相信您需要更改目录的所有者,或者将组添加到包含apache用户的目录中,或者使用一些高级技术(如ACL)。
要测试它,请尝试以下操作:以root用户身份登录。切换到apache用户。尝试手动创建文件。切换回root,更改文件夹的权限/所有权,切换到apache用户,再试一次。这应该会为您提供有关脚本在尝试创建文件时是否会失败的更多信息。
最后,它有点违反直觉,请确保apache用户以某种方式在该目录中具有执行权限,否则它将不允许您进入该目录。
此外,我认为您需要设置目录(chmod g+s
或chmod 2755
等)的“s”位,以便新添加的文件继承目录的权限。然后,您需要确保已设置组的位,并且该组拥有该目录。 (或者您可以将目录组设置为www-data)。