首先,我通过ssh连接到ec2机器,然后以root用户在/ var / log中创建一个名为app_logs的文件夹:
mkdir /var/log/app_logs
之后,我执行以下操作:
cd /var/log/
chmod g+s app_logs/
setfacl -d -m g::rw app_logs/
chown wsgi:wsgi app_logs/
这样可以确保在此文件夹中创建的所有文件都将wsgi作为所有者,并且对于该文件所属的组是可写的。我必须这样做,因为我注意到django应用程序创建的日志文件具有root作为所有者和所有者组,但是该应用程序通过wsgi用户运行。
我有一个类似的问题,但是在Elastic Beanstalk上,因此我在.ebextensions
应用程序的文件夹中创建了一个配置文件(例如applogs.config)。如果尚不存在app-logs文件夹,则会创建该文件夹,并设置文件权限和所有者,以便该应用可以在此处写入其日志。
commands:
00_create_dir:
command: mkdir -p /var/log/app-logs
01_change_permissions:
command: chmod g+s /var/log/app-logs
02_change_owner:
command: chown wsgi:wsgi /var/log/app-logs
最后,在你的Django设置中:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/var/log/app-logs/django.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
另外,如果希望使用Web从beantalk日志访问日志,请将其添加到.ebextensions中的文件中。
files:
"/opt/elasticbeanstalk/tasks/taillogs.d/django.conf":
mode: "000755"
owner: root
group: root
content: |
/var/log/app-logs/django.log