Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

505
Views
UWSGI no redirige la salida estándar de la aplicación a la salida estándar, solo al archivo

Tengo una aplicación Flask ejecutándose dentro de un contenedor, donde configuré el registro con StreamHandler() , por lo que los registros se envían a la salida estándar.
Cuando mi archivo uwsgi.ini incluye una declaración para redirigir los registros a un archivo (mediante logto ), los registros de la aplicación están disponibles en el archivo de registro mezclado con los registros de uWSGI (como se esperaba).

Pero cuando elimino el registro de logto , porque quiero que esos registros se envíen a la uwsgi.ini estándar del contenedor de Docker, solo los registros de uWSGI están visibles en los registros del contenedor de Docker, los registros de la aplicación no lo están. (los registros de uWSGI estaban allí incluso antes)

uwsgi.ini:

 [uwsgi] base = /app_home/app wsgi-file = /app_home/app/wsgi.py callable = app socket = /tmp/uwsgi.sock chmod-socket = 666 # Log directory - we needed this to be turned off, so the logs are sent to STDOUT # logto = /var/log/uwsgi/app.log vacuum = true master = true processes = 3 enable-threads = true uid = app gid = app master-fifo = /tmp/fifo0 master-fifo = /tmp/fifo1 chdir = /app_home/app

Cuando el logto está habilitado, el archivo de registro incluye los registros de la aplicación (como debería):

 [2019-03-05 17:19:05,415] INFO in __init__: Initial starting of app... 2019-03-05 17:19:05,415 (9) - INFO - Initial starting of app...- [in ./app/__init__.py:128, function:create_app] WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x1ad49b0 pid: 9 (default app) *** uWSGI is running in multiple interpreter mode *** gracefully (RE)spawned uWSGI master process (pid: 9) spawned uWSGI worker 1 (pid: 32, cores: 1)

Una vez que el inicio de logto está deshabilitado, no hay ningún archivo de registro (como se esperaba), pero tampoco ninguna aplicación se registra en el registro del contenedor de Docker. El contenedor docker se ve exactamente igual que antes:

 2019-03-05T22:19:09.956784133Z 2019-03-05 17:19:09,956 CRIT Supervisor running as root (no user in config file) 2019-03-05T22:19:09.959701644Z 2019-03-05 17:19:09,959 INFO supervisord started with pid 1 2019-03-05T22:19:10.961366502Z 2019-03-05 17:19:10,961 INFO spawned: 'nginx' with pid 9 2019-03-05T22:19:10.963312945Z 2019-03-05 17:19:10,962 INFO spawned: 'uwsgi' with pid 10 2019-03-05T22:19:12.928470278Z 2019-03-05 17:19:12,928 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2019-03-05T22:19:12.928498809Z 2019-03-05 17:19:12,928 INFO success: uwsgi entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

La documentación de uWSGI muestra que los registros se envían a stdout/stderr de forma predeterminada (consulte https://uwsgi-docs.readthedocs.io/en/latest/Logging.html ), por lo que realmente no veo una razón por la cual los registros de la aplicación no se enviaría a stdout con los propios registros de uWSGI, sino que se enviaría a un archivo con logto .

EDITAR (SOLUCIONADO) :
Entonces resulta que había dos problemas:

  1. Como uWSGI se ejecuta en el contenedor Docker con Supervisor, necesito que el supervisor redirija la salida estándar de uwsgi a su salida estándar.
    supervisord.conf:
 [program:uwsgi] command=/usr/local/bin/uwsgi --ini /app_home/app/uwsgi.ini --uid app --gid app --log-master stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0

Si bien esto ha funcionado con otras aplicaciones (como NGinx), no fue suficiente para uWSGI, consulte el paso n.º 2:

  1. Se tuvo que agregar un indicador especial ( --log-master ) a uWSGI para delegar el registro al proceso maestro:
 [program:uwsgi] command=/usr/local/bin/uwsgi --ini /app_home/app/uwsgi.ini --uid app --gid app --log-master stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0

Y whoala, los registros de las aplicaciones Flask son visibles en el registro del contenedor Docker.

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!