2014-12-18 12 views
9

Come gestite i registri delle applicazioni nel beanstalk elastico AWS? Voglio dire che scrivi i registri delle applicazioni su quale file? Sto utilizzando la seguente configurazione di registrazione nel mio ambiente di sviluppo, ma questo non funziona quando distribuisco in AWS.Registrazione AWS Elastic Beanstalk con python (django)

Grazie in anticipo!

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

risposta

9

Ok, ho trovato un modo per farlo.

Prima ho collegato via ssh alla macchina EC2, poi ho creare una cartella in/var/log chiamati app_logs con utente root:

mkdir /var/log/app_logs 

Dopo che ho fatto la seguente:

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

Questo garantisce che tutti i file creati in questa cartella abbiano wsgi come proprietario e possa essere scritto per il gruppo a cui appartiene il file. Ho dovuto farlo perché ho notato che il file di registro creato dall'app django aveva root come proprietario e gruppo di proprietari ma l'applicazione viene eseguita tramite utente wsgi.

Infine ho cambiato DEBUG_LOG_DIR a /var/log/app_logs/django_debug.log

7

Ho avuto un problema simile, ma su Elastic Beanstalk, così ho creato un file di configurazione (ad esempio applogs.config) in .ebextensions cartella del app. Questo crea la cartella dei registri delle app se non è già presente e imposta i permessi e il proprietario del file in modo che l'app possa scriverli lì.

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

nel mio setup id dovuto usare un altro utente: 'comando: chown WSGI: WSGI/var/log/app-logs' – linqu

+0

Questa dovrebbe essere la risposta correttamente accettata. Se si ricostruisce l'istanza con la risposta accettata, sarà necessario ricreare il file ogni volta. –

-2

Per impostazione predefinita in elasticbeanstalk, è possibile visualizzare i log degli errori di django qui.

/var/log/httpd/error_log 
+0

No, gli errori del server Django non vengono visualizzati in questo file. –

+0

loro _might_ finiscono lassù, ma questo è solo in alcuni casi. – igorsantos07

0

C'è un modo semplice che non richiede alcuna configurazione di beanstalk.

Nelle impostazioni Django sotto REGISTRAZIONE istituito un gestore diretto al file '/ opt/python/log/{} log_file_name'. È possibile accedere ai registri tramite il menu dell'ambiente di beanstalk in "Registri".

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

Questa posizione è indicato nella documentazione qui:

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

Problemi correlati