2014-12-18 18 views
9

Wie verwalten Sie Ihre Anwendungsprotokolle in AWS Elastic Beanstalk? Ich meine, Sie schreiben Ihre Anwendungsprotokolle in welche Datei? Ich verwende die folgende Protokollierungskonfiguration in meiner Entwicklungsumgebung, aber dies funktioniert nicht, wenn ich sie in AWS implementiere.AWS Elastic Beanstalk-Protokollierung mit Python (Django)

Vielen Dank im Voraus!

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', 
     }, 
    } 
} 

Antwort

9

Ok, ich habe einen Weg gefunden, es zu tun.

Zuerst habe ich per ssh auf EC2 Maschine verbunden ist, dann erzeuge ich einen Ordner in/var/genannt app_logs mit Root-Benutzer anmelden:

mkdir /var/log/app_logs 

Danach habe ich die Folge tat

cd /var/log/ 
chmod g+s app_logs/ 
setfacl -d -m g::rw app_logs/ 
chown wsgi:wsgi app_logs/ 

Dadurch wird sichergestellt, dass alle Dateien, die in diesem Ordner erstellt werden, über wsgi als Eigentümer verfügen und für die Gruppe, zu der die Datei gehört, schreibbar sind. Ich musste das tun, weil ich bemerkte, dass die Protokolldatei, die von der Django-App erstellt wurde, root als Eigentümer und Eigentümergruppe hatte, aber die Anwendung über wsgi Benutzer läuft.

Schließlich wechselte ich DEBUG_LOG_DIR

7

Ich hatte ein ähnliches Problem, aber auf Elastic Beanstalk /var/log/app_logs/django_debug.log, so habe ich eine Config-Datei (zB applogs.config) in .ebextensions Ordner des App Dadurch wird der Ordner "applogs" erstellt, sofern dieser noch nicht vorhanden ist, und die Berechtigungen und der Besitzer der Datei festgelegt, sodass die App ihre Protokolle dort schreiben kann.

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 webapp:webapp /var/log/app-logs 
+6

in meinem Setup-ID hatte einen anderen Benutzer zu verwenden: 'Befehl ein: chown wsgi: wsgi/var/log/app-logs' – linqu

+0

Dies sollte die korrekt angenommene Antwort sein. Wenn Sie die Instanz mit der akzeptierten Antwort neu erstellen, müssen Sie die Datei jedes Mal neu erstellen. –

-2

standardmäßig in elasticbeanstalk, können Sie die django Fehlerprotokolle hier sehen.

/var/log/httpd/error_log 
+0

Nein, Django-Serverfehler werden in dieser Datei nicht angezeigt. –

+0

sie _might_ enden dort, aber das ist nur in einigen Fällen. – igorsantos07

0

Es gibt einen einfachen Weg, der keine Bohnenstangenkonfiguration erfordert.

In Ihrem django Einstellungen unter LOGGING einen Handler gerichtet auf die Datei '/ opt/Python/log/{LOG_FILE_NAME}' einrichten. Auf die Protokolle kann dann über das Beanstalk-Umgebungsmenü unter "Protokolle" zugegriffen werden. hier

LOGGING = { 
    ..., 
    'handlers': { 
     'logfile': { 
      'level': 'DEBUG', 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/opt/python/log/{log_file_name}', 
     }, 
    }, 
    'loggers': { 
     'debugger': { 
      'level': 'DEBUG', 
      'handlers': ['logfile'], 
     'propagate': False, 
    }, 
} 

Dieser Ort wird in der Dokumentation angegeben:

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

Verwandte Themen