2017-07-13 2 views
1

J'utilise Gunicorn en face d'une application Python Flask. Je suis en mesure de configurer le format du journal d'accès en utilisant le paramètre de ligne de commande --access-log-format lorsque je cours gunicorn. Mais je ne peux pas comprendre comment configurer les journaux d'erreurs.Comment puis-je configurer gunicorn pour utiliser un format de journal d'erreurs cohérent?

Je serais bien avec le format par défaut, sauf que ce n'est pas cohérent. Il semble que les messages d'état de Gunicorn ont un format, mais les exceptions d'application ont un format différent. Cela rend difficile l'utilisation de l'agrégation de journaux.

Par exemple, voici quelques messages du journal des erreurs de Gunicorn. Les premières lignes ont un format différent de la ligne d'exception. Événement le format datetime est différent.

[2017-07-13 16:33:24 +0000] [15] [INFO] Booting worker with pid: 15 
[2017-07-13 16:33:24 +0000] [16] [INFO] Booting worker with pid: 16 
[2017-07-13 16:33:24 +0000] [17] [INFO] Booting worker with pid: 17 
[2017-07-13 16:33:24 +0000] [18] [INFO] Booting worker with pid: 18 
[2017-07-13 18:31:11,580] ERROR in app: Exception on /api/users [POST] 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
... 

Quelle est la meilleure façon de configurer gunicorn pour utiliser la mise en forme cohérente pour ses journaux d'erreurs?

Répondre

0

L'utilisation de ce fichier de configuration de l'enregistrement, j'ai pu changer l'erreur format de journal

[loggers] 
keys=root, gunicorn.error 

[handlers] 
keys=error_console 

[formatters] 
keys=generic 

[logger_root] 
level=INFO 
handlers=error_console 

[logger_gunicorn.error] 
level=INFO 
handlers=error_console 
propagate=0 
qualname=gunicorn.error 

[handler_error_console] 
class=StreamHandler 
formatter=generic 
args=(sys.stderr,) 

[formatter_generic] 
format=%(asctime)s %(levelname)-5s [%(module)s] ~ %(message)s 
datefmt=%Y-%m-%d %H:%M:%S %Z 
class=logging.Formatter 

La clé est de remplacer la configuration de l'enregistreur gunicorn.error, et le fait snipped ci-dessus exactement cela.

Notez le champ propagate=0, il est important sinon vos messages de journal seront imprimés deux fois (gunicorn conserve toujours la configuration de journalisation par défaut).