31

AWS Elastic 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',
        },
    }
}
4

7 に答える 7

35

.ebextensions同様の問題がElastic Beanstalkで発生したため、アプリのフォルダーに構成ファイル(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
于 2016-01-15T21:18:05.147 に答える
10

わかりました、私はそれを行う方法を考え出しました。

最初に ssh 経由で ec2 マシンに接続し、root ユーザーで app_logs という名前の /var/log フォルダーを作成します。

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 アプリによって作成されたログ ファイルには所有者および所有者グループとしてルートが含まれているが、アプリケーションは wsgi ユーザーを介して実行されることに気付いたので、これを行う必要がありました。

最後に、DEBUG_LOG_DIR を /var/log/app_logs/django_debug.log に変更しました。

于 2015-01-09T00:18:03.277 に答える