24

我有一个 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 创建新日志吗?

谢谢

4

1 回答 1

10

如果父目录的用户/组允许,则可以创建新文件。我相信您要么需要更改目录的所有者,要么在包含 apache 用户的目录中添加一个组,或者使用一些高级技术,例如 ACL。

要对其进行测试,请尝试以下操作: 以 root 身份登录。切换到apache用户。尝试手动创建文件。切换回root,更改文件夹的权限/所有权,切换到apache用户,再试一次。这应该会为您提供更多关于脚本在尝试创建文件时是否会失败的信息。

最后,这有点违反直觉,请确保 apache 用户以某种方式在该目录中具有执行权限,否则它将不允许您 cd 进入该目录。

另外,我认为您需要设置目录(chmod g+schmod 2755等)的“s”位,以便新添加的文件继承目录的权限。然后,您需要确保已设置组的 s 位,并且该组拥有该目录。(或者您可以将目录的组设置为 www-data)。

于 2013-01-16T08:45:46.417 回答