使用python(django)记录AWS Elastic Beanstalk

问题描述 投票:19回答:5

如何在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',
        },
    }
}
python django amazon-web-services elastic-beanstalk
5个回答
24
投票

我有一个类似的问题,但在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

11
投票

好的,我想出了办法。

首先我通过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


4
投票

有一种简单的方法,不需要任何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,
    },
}

此位置在此处的文档中说明:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.logging.html#health-logs-instancelocation


0
投票

作为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”部分看到日志作为单独的部分。


-3
投票

默认情况下,在elasticbeanstalk中,您可以在此处查看django错误日志。

/var/log/httpd/error_log
© www.soinside.com 2019 - 2024. All rights reserved.