permission/userapache2用什么写django日志
What permission/user does apache2 use to write django logs
我有一个很好的问题,我希望专家能为我评论一下。 (也许是格雷厄姆·邓普尔顿)
所以我有一个 Django 网络应用程序(在 ubuntu 16.04 上开发),它在 /var/log/apache2/APPNAME.log 上记录了一些失败,如下所示。
因为 /var/log/apache2 中的所有文件都有 root:adm 所有者,我以同样的方式授予我的日志文件的所有权,并确保 www-data 是 adm 组的成员。然后我将 rwx 授予所有者组的 adm 组,我测试一切正常。
24 小时后,文件和父文件夹的权限已更改,我可以看到日志文件和父目录的写入权限已被撤销,导致权限被拒绝错误错误,因为无法创建日志文件写了。
以下是我的问题,如果您能帮忙的话:
1) Django 日志文件放在哪里合适?
2) 什么进程在什么用户权限下写入文件?
3) 哪个进程重置了 /var/log/apache 中的权限,为什么?
提前致谢,
希望这个问题对其他人也有帮助。
干杯,
麦克
views.py
from django.shortcuts import render
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django import forms
from django.core.mail import send_mail, EmailMessage
from StudioHanel.forms import ContactForm
import traceback
import time
# import the logging library
import logging
import sys
# Get an instance of a logger
#logger = logging.getLogger('APPNAME')
def contact(request):
logger.debug('Contact Start!')
if request.method == 'POST':
etc...
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'applogfile': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': os.path.join('/var/log/apache2', 'APPNAME.log'),
'maxBytes': 1024*1024*15, 15MB
'backupCount': 10,
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'APPNAME': {
'handlers': ['applogfile',],
'level': 'DEBUG',
},
}
}
1) Django日志文件放在哪里合适?
最近我在 django-users 邮件列表中发起了一个关于用于 Django 项目的目录的 discussion,我的结论是没有标准的做法。我决定使用 /var/log/django-project-name
.
无论如何,/var/log/apache2
是错误的地方,因为您发现的问题,logrotate
会干扰。更多内容见下文。
2) 什么进程在什么用户权限下写入文件?
如果你使用Gunicorn,就是gunicorn
进程,如果你使用uWSGI,就是uwsgi
。从您对 Graham Dumpleton 的引用来看,您正在使用 mod_wsgi。所以进程是mod_wsgi守护进程。
这些进程写入文件的用户是进程 运行s 的用户。对于 mod_wsgi,您可以为 WSGIDaemonProcess
指令指定一个 user
选项。根据its documentation,"If this option is not supplied the daemon processes will be run as the same user that Apache would run child processes and as defined by the User directive."在Ubuntu,这是www-data
。我认为使用 user
选项和 运行 守护进程作为不同的专用用户是个好主意。
您不应将 www-data
添加到 adm
组。 adm
组是有权读取日志文件的人。 www-data
不应该有这样的权限。 (读写它自己的日志文件没问题,但你不希望它有读取 /var/log/syslog
的权限。)
3) 哪个进程重置了 /var/log/apache 中的权限,为什么?
是logrotate
,cron是运行;参见 /etc/cron.daily/logrotate
。 /etc/logrotate.d/apache2
处的配置操作所有匹配 /var/log/apache2/*.log
的文件。 logrotate
的主要目的是循环日志。也就是说,它每天创建一个新的日志文件,昨天的命名为 access.log.1
,在昨天的命名为 access.log.2.gz
之前,依此类推,并删除超过几天的日志。这样做是为了节省 space 并使日志易于管理。 logrotate
如果文件的权限错误,也会修复文件的权限。
理论上你应该配置 logrotate
来轮换你的 Django 项目的日志,否则它们最终可能会填满磁盘。
对于 mod_wsgi,您最好将 Python 日志记录到 stderr
或 stdout
,以便将其捕获到 Apache 错误日志中。不要像使用 Apache 日志文件那样创建单独的日志文件,日志文件轮换之类的事情会自动为您处理。有关示例,请参见 'Logging of Python exceptions' 下的:
请确保为 VirtualHost
配置 Apache 的单独错误日志,以便将站点日志记录单独保存到主 Apache 错误日志中。
我有一个很好的问题,我希望专家能为我评论一下。 (也许是格雷厄姆·邓普尔顿)
所以我有一个 Django 网络应用程序(在 ubuntu 16.04 上开发),它在 /var/log/apache2/APPNAME.log 上记录了一些失败,如下所示。
因为 /var/log/apache2 中的所有文件都有 root:adm 所有者,我以同样的方式授予我的日志文件的所有权,并确保 www-data 是 adm 组的成员。然后我将 rwx 授予所有者组的 adm 组,我测试一切正常。
24 小时后,文件和父文件夹的权限已更改,我可以看到日志文件和父目录的写入权限已被撤销,导致权限被拒绝错误错误,因为无法创建日志文件写了。
以下是我的问题,如果您能帮忙的话:
1) Django 日志文件放在哪里合适?
2) 什么进程在什么用户权限下写入文件?
3) 哪个进程重置了 /var/log/apache 中的权限,为什么?
提前致谢,
希望这个问题对其他人也有帮助。
干杯, 麦克
views.py
from django.shortcuts import render
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django import forms
from django.core.mail import send_mail, EmailMessage
from StudioHanel.forms import ContactForm
import traceback
import time
# import the logging library
import logging
import sys
# Get an instance of a logger
#logger = logging.getLogger('APPNAME')
def contact(request):
logger.debug('Contact Start!')
if request.method == 'POST':
etc...
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'applogfile': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': os.path.join('/var/log/apache2', 'APPNAME.log'),
'maxBytes': 1024*1024*15, 15MB
'backupCount': 10,
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'APPNAME': {
'handlers': ['applogfile',],
'level': 'DEBUG',
},
}
}
1) Django日志文件放在哪里合适?
最近我在 django-users 邮件列表中发起了一个关于用于 Django 项目的目录的 discussion,我的结论是没有标准的做法。我决定使用 /var/log/django-project-name
.
无论如何,/var/log/apache2
是错误的地方,因为您发现的问题,logrotate
会干扰。更多内容见下文。
2) 什么进程在什么用户权限下写入文件?
如果你使用Gunicorn,就是gunicorn
进程,如果你使用uWSGI,就是uwsgi
。从您对 Graham Dumpleton 的引用来看,您正在使用 mod_wsgi。所以进程是mod_wsgi守护进程。
这些进程写入文件的用户是进程 运行s 的用户。对于 mod_wsgi,您可以为 WSGIDaemonProcess
指令指定一个 user
选项。根据its documentation,"If this option is not supplied the daemon processes will be run as the same user that Apache would run child processes and as defined by the User directive."在Ubuntu,这是www-data
。我认为使用 user
选项和 运行 守护进程作为不同的专用用户是个好主意。
您不应将 www-data
添加到 adm
组。 adm
组是有权读取日志文件的人。 www-data
不应该有这样的权限。 (读写它自己的日志文件没问题,但你不希望它有读取 /var/log/syslog
的权限。)
3) 哪个进程重置了 /var/log/apache 中的权限,为什么?
是logrotate
,cron是运行;参见 /etc/cron.daily/logrotate
。 /etc/logrotate.d/apache2
处的配置操作所有匹配 /var/log/apache2/*.log
的文件。 logrotate
的主要目的是循环日志。也就是说,它每天创建一个新的日志文件,昨天的命名为 access.log.1
,在昨天的命名为 access.log.2.gz
之前,依此类推,并删除超过几天的日志。这样做是为了节省 space 并使日志易于管理。 logrotate
如果文件的权限错误,也会修复文件的权限。
理论上你应该配置 logrotate
来轮换你的 Django 项目的日志,否则它们最终可能会填满磁盘。
对于 mod_wsgi,您最好将 Python 日志记录到 stderr
或 stdout
,以便将其捕获到 Apache 错误日志中。不要像使用 Apache 日志文件那样创建单独的日志文件,日志文件轮换之类的事情会自动为您处理。有关示例,请参见 'Logging of Python exceptions' 下的:
请确保为 VirtualHost
配置 Apache 的单独错误日志,以便将站点日志记录单独保存到主 Apache 错误日志中。