AWS Elastic Beanstalk logging with python (django)
I had a similar issue but on Elastic Beanstalk, so I created a config file (e.g. applogs.config) in .ebextensions
folder of the app. This creates the app-logs folder if it is not there already and sets the file permissions and owner so that the app can write its logs there.
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
Finally, in your Django settings:
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, }, },}
Aditionally, if you want your log to be accessible from beanstalk logs using the web, add this to your file in .ebextensions
files: "/opt/elasticbeanstalk/tasks/taillogs.d/django.conf": mode: "000755" owner: root group: root content: | /var/log/app-logs/django.log
Ok, I figured out a way to do it.
First I connected via ssh to ec2 machine, then I create a folder in /var/log called app_logs with root user:
mkdir /var/log/app_logs
After that I did the follow:
cd /var/log/chmod g+s app_logs/setfacl -d -m g::rw app_logs/chown wsgi:wsgi app_logs/
That ensures that all the files created in this folder will have wsgi as owner and will be writable for the group that the file belongs. I had to do that because I noticed that the log file created by django app had root as owner and owner group but the application runs through wsgi user.
Finally I changed DEBUG_LOG_DIR to /var/log/app_logs/django_debug.log
There's a simple way that doesn't require any beanstalk configuration.
In your django settings under LOGGING set up a handler directed to the file '/opt/python/log/{log_file_name}'. The logs can then be accessed via the beanstalk environment menu under "Logs".
LOGGING = { ..., 'handlers': { 'logfile': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/opt/python/log/{log_file_name}', }, }, 'loggers': { 'debugger': { 'level': 'DEBUG', 'handlers': ['logfile'], 'propagate': False, },}
This location is stated in the documentation here: