2014-12-18 23 views
9

Jak zarządzać dziennikami aplikacji w elastycznej fasoli AWS? Mam na myśli, że piszesz dzienniki aplikacji, do którego pliku? Używam poniższej konfiguracji rejestrowania w moim środowisku programistycznym, ale to nie działa, gdy wdrażam w AWS.AWS Elastic Beanstalk logowanie przy użyciu pythona (django)

Z góry dzięki!

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

Odpowiedz

9

Ok, wymyśliłem sposób, aby to zrobić.

Najpierw podłączony poprzez ssh do maszyny EC2, a następnie utworzyć folder w katalogu/var/log zwane app_logs z użytkownikiem root:

mkdir /var/log/app_logs 

Potem zrobiłem następująco:

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

Gwarantuje to, że wszystkie pliki utworzone w tym folderze będą zawierać wsgi jako właściciel i będą mogły być zapisywane dla grupy, do której należy ten plik. Musiałem to zrobić, ponieważ zauważyłem, że plik dziennika utworzony przez django miał root jako właściciel i właściciel grupy, ale aplikacja działa przez użytkownika wsgi.

końcu zmieniłem DEBUG_LOG_DIR do /var/log/app_logs/django_debug.log

7

miałem podobny problem, ale na Elastic Beanstalk, więc stworzyłem plik konfiguracyjny (np applogs.config) w .ebextensions folderze aplikacja. Spowoduje to utworzenie folderu aplikacji-logów, jeśli jeszcze go tam nie ma, i ustawienie uprawnień do pliku oraz właściciela, aby aplikacja mogła tam zapisywać swoje dzienniki.

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

w moim id konfiguracji musiałem użyć innego użytkownika: 'komenda: chown WSGI: WSGI/var/log/app-logs' – linqu

+0

To powinna być poprawna odpowiedź. Jeśli przebudujesz instancję z zaakceptowaną odpowiedzią, będziesz musiał ponownie utworzyć plik za każdym razem. –

-2

Domyślnie w elasticbeanstalk, tutaj można zobaczyć dzienniki błędów django.

/var/log/httpd/error_log 
+0

Nie, błędy serwera Django nie pojawiają się w tym pliku. –

+0

one kończą się tam, ale to tylko w niektórych przypadkach. – igorsantos07

0

Istnieje prosty sposób, który nie wymaga konfiguracji łodygi fasoli.

W ustawieniach django pod LOGGING założyć obsługi skierowaną do pliku '/ opt/python/log/{}' nazwa_pliku_logu. Dostęp do dzienników można uzyskać za pośrednictwem menu środowiska beanstalk w "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, 
    }, 
} 

Lokalizacja ta jest zawarta w dokumentacji tutaj:

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

Powiązane problemy