Gunicorn: ¿Cómo imprimo el registro de acceso a STDOUT?

Creado en 19 ene. 2016  ·  22Comentarios  ·  Fuente: benoitc/gunicorn

Hola,

http://docs.gunicorn.org/en/stable/settings.html#accesslog me dice que '-' se generará en stderr pero preferimos STDOUT para fines de registro. ¿Hay una manera de hacer eso?

¡Gracias!

Documentation FeaturLogging

Comentario más útil

Con el archivo de aplicación myapp.py , probé lo siguiente.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Puedo confirmar que la salida del registro de acceso va a stdout .

Todos 22 comentarios

La línea relevante está aquí: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() por defecto es sys.stderr . Tal vez podríamos cambiar accesslog para aceptar "stdout" y "stderr" como valores válidos y pasar a logging.StreamHandler() .

Otra solución pero menos flexible:

El controlador de la consola ya se imprime en sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 Podríamos configurar el controlador en "consola" por gunicorn.accesslog como ya hicimos por gunicorn.error en https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

Estoy confundido. ¿El StreamHandler ya no inicia sesión en sys.stdout?

OK entiendo ahora. Originalmente estábamos imprimiendo registros en la salida estándar. En mi opinión, el registro de acceso debe estar predeterminado en STDOUT. ¿Pensamientos?

@benoitc :+1:

Acceder al registro en stdout
Registro de errores en stderr

¿Alguna actualización sobre esta solicitud?

@benoitc No estoy seguro de que este compromiso aborde este problema. Digamos que ejecuto, gunicorn myapp:app sin argumentos adicionales. ¿Se espera que gunicorn registre los registros de acceso a la salida estándar? Si es así, gunicorn no hace eso.

En https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 sin ningún argumento de línea de comando, self.cfg.accesslog es None y la función regresa temprano. Por lo que puedo decir, parece que no hay forma de iniciar sesión en stdout sin especificar --log-config o --log-syslog . ¿Es esto correcto?

por defecto, el registro de acceso está deshabilitado si esto es lo que quiere decir?

@benoitc Sí. La discusión anterior parece indicar que los registros de acceso irán a stdout y los registros de errores a stderr. Sin embargo, parece que el registro de acceso está desactivado de forma predeterminada.

Por cierto, con Python 2.7 solía poder hacer --access-log /dev/stdout --error-log /dev/stderr y funcionaba. Con Python 3, pasar /dev/stdout como argumento falla en https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498

👍 @suriya Creo que estoy buscando el mismo comportamiento que tú: me gustaría ejecutar --capture-log y habilitar --access-logfile=<something> , pero prefiero que mis líneas de registro de acceso vayan a la salida estándar no estándar.

EDITAR: Para aclarar, esto parece ser solo un problema con Python3. Usando python3.5.1, pasar --access-logfile=/dev/stdout a gunicorn falla al iniciar el servidor.

Sí, parece que el registro de acceso está deshabilitado de forma predeterminada.

@huoxy Más que cuál es el valor predeterminado, creo que el problema es más que no hay una forma simple de escribir registros de acceso a la salida estándar.

@huoxy ˋ--access-logfile=-` debería funcionar. Déjame saber si no.

  • benoît
    El miércoles 27 de julio de 2016 a las 08:49, Suriya Subramanian [email protected]
    escribió:

@huoxy https://github.com/huoxy Más de lo que es el valor predeterminado, creo
el problema es más que no hay una forma sencilla de escribir registros de acceso a
salida estándar.


Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment-235501347 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

También es probable que sea un problema de doc. pero el registro de acceso debe imprimirse en stdout
cuando se usa - . de lo contrario es un error. Hágamelo saber...
El miércoles 27 de julio de 2016 a las 09:03, Benoit Chesneau [email protected] escribió:

@huoxy ˋ--access-logfile=-` debería funcionar. Déjame saber si no.

  • benoît
    El miércoles 27 de julio de 2016 a las 08:49, Suriya Subramanian [email protected]
    escribió:

@huoxy https://github.com/huoxy Más de lo que es el valor predeterminado, creo
el problema es más que no hay una forma sencilla de escribir registros de acceso a
salida estándar.


Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment-235501347 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc Como se mencionó en #1293, gunicorn --access-log - registra los accesos al error estándar. Intenté con gunicorn --access-log=- y el registro aún arroja un error estándar.

de acuerdo a esto:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

El registrador predeterminado es console que da salida a la salida estándar, así que supongo que si necesita que todo salga como yo, para que todo llegue al controlador de registro de gunicorn, puede dejar esas opciones en blanco.

Además, la solución que sugeriría es crear un enlace simbólico para los archivos de registro a /dev/stdout o /dev/stderror si no funciona directamente:

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

Me acabo de mudar a gunicorn 19.7.0 lanzado la semana pasada. Desafortunadamente, todavía no puedo escribir el registro de acceso en otra cosa que no sea stderr.

Intenté ejecutar gunicorn sin opciones y también con todas las permutaciones de incluir/no incluir "--access-logfile=- --error-logfile=- --log-level=DEBUG".

¿Me estoy perdiendo algo básico sobre el registro de gunicorn? ¿Es posible que algo de mi entorno o de Django se derrame y cause este problema?

Con el archivo de aplicación myapp.py , probé lo siguiente.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Puedo confirmar que la salida del registro de acceso va a stdout .

Estoy en Python 2.7.14. (De alguna manera se perdió la respuesta rápida hace meses).

También puede usar accesslog = "-" en su gunicorn.config.py

¿Fue útil esta página
0 / 5 - 0 calificaciones