如何在AWS弹性beanstalk中管理应用程序日志? 我是说你把应用程序日志写到哪个文件? 我在我的开发环境中使用以下日志记录配置,但是当我在AWS中部署时,这不起作用。
提前致谢!
DEBUG_LOG_DIR = BASE_DIR + "/django_debug.log"
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
# How to format the output
'formatters': {
'standard': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
},
# Log handlers (where to go)
'handlers': {
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'log_file': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': DEBUG_LOG_DIR,
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console':{
'level':'INFO',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
},
},
# Loggers (where does the log come from)
'loggers': {
'repackager': {
'handlers': ['console', 'log_file'],
'level': 'DEBUG',
'propagate': True,
},
'django': {
'handlers':['console'],
'propagate': True,
'level':'WARN',
},
'django.db.backends': {
'handlers': ['console', 'log_file'],
'level': 'WARN',
'propagate': False,
},
'': {
'handlers': ['console', 'log_file'],
'level': 'DEBUG',
},
}
}
我有一个类似的问题,但在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从beanstalk日志访问日志,请将其添加到.ebextensions中的文件中
files:
"/opt/elasticbeanstalk/tasks/taillogs.d/django.conf":
mode: "000755"
owner: root
group: root
content: |
/var/log/app-logs/django.log
好的,我想出了办法。
首先我通过ssh连接到ec2机器,然后在/ var / log中创建一个名为app_logs的文件夹,其中包含root用户:
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 app创建的日志文件具有root作为所有者和所有者组,但应用程序通过wsgi用户运行。
最后我将DEBUG_LOG_DIR更改为/var/log/app_logs/django_debug.log
有一种简单的方法,不需要任何beanstalk配置。
在LOGGING下的django设置中,设置一个指向文件'/ opt / python / log / {log_file_name}'的处理程序 。 然后可以通过“Logs”下的beanstalk环境菜单访问日志。
LOGGING = {
...,
'handlers': {
'logfile': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/python/log/{log_file_name}',
},
},
'loggers': {
'debugger': {
'level': 'DEBUG',
'handlers': ['logfile'],
'propagate': False,
},
}
此位置在此处的文档中说明:
作为linux权限的初学者,我花了一些时间才能让它工作。 总结以上给出的答案,以下最终对我有用:
logging.config
commands:
00_create_dir:
command: mkdir -p /var/log/app-logs
01_change_permissions:
command: chmod g+s /var/log/app-logs
02_change_default_owner:
command: setfacl -d -m g::rw /var/log/app-logs
03_change_owner:
command: chown wsgi:wsgi /var/log/app-logs
settings.py
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,
},
},
}
有了这个,我可以使用'eb logs'或在Beanstalk环境中的“logs”部分看到日志作为单独的部分。
默认情况下,在elasticbeanstalk中,您可以在此处查看django错误日志。
/var/log/httpd/error_log