Uwsgi отправляет только журналы stdout на GCP в Kubernetes Engine
У меня есть приложение django, для которого я хочу отправлять журналы в GCP.
Локально все работает нормально, используя django dev server и Cloud Logging for Python. Я вижу журналы на моей приборной панели GCP с нужным уровнем, я также могу видеть структурированные json журналы, когда я их использую. Это также хорошо работает, когда я использую gunicorn в локальном докере вместо сервера django dev.
Однако, как только я использую uwsgi локально, я не могу найти никаких следов моих журналов в приборной панели GCP. Когда я разворачиваю свой образ докера в Kubernetes Engine, все журналы отображаются только как информация, и они больше не структурированы в json. Я заметил, что имя логгера stdout
в моем проводнике журналов
Я предполагаю, что uwsgi каким-то образом не использует мой конфиг протоколирования python и протоколирует только stdout
, который автоматически отправляется как информация каким-то внутренним процессом gcp.
Вот мой uwsgi.ini
:
[uwsgi]
chdir=xxx
module=xxx
http = 0.0.0.0:8080
vacuum = true
enable-threads = true
listen = 128
# socket-timeout, http-timeout and harakiri are in s
socket-timeout = 180
http-timeout = 180
harakiri = 180
harakiri-verbose = true
py-autoreload = false
processes = 4
memory-report = false
master = true
master-fifo = /tmp/master-fifo
post-buffering = 65536
buffer-size = 65535
max-requests = 1500
max-requests-delta = 100
max-worker-lifetime = 3600
hook-accepting1-once = write:/tmp/bkm.ready ok
# Logging configuration
# Disable request logging. It's done from the application
disable-logging = true
log-master = false
# this will only prefix system logs
log-prefix = [uWSGI]
и моя конфигурация протоколирования
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'verbose': {
'format': '%(name)s [%(module)s:%(funcName)s:%(lineno)d] > %(message)s',
},
'simple': {
'format': '%(levelname)s > %(message)s',
},
},
'handlers': {
'console_simple': {
'class': 'logging.StreamHandler',
'filters': ['require_debug_true'],
'formatter': 'simple',
'level': 'DEBUG',
},
'console_verbose': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
'level': 'INFO',
},
'slack': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'api.project.logger.SlackHandler',
},
'stackdriver_logging': {
'level': 'INFO',
'class': 'google.cloud.logging_v2.handlers.CloudLoggingHandler',
'formatter': 'verbose',
'client': logging_v2.Client(),
'labels': {'env': ENV_LABEL},
},
},
'loggers': {
'api': {
'handlers': [
# 'console_simple',
'console_verbose',
'stackdriver_logging',
'slack',
],
'level': 'DEBUG',
'propagate': False,
},
},
'root': {
'handlers': ['console_verbose'],
'level': 'DEBUG',
},
}
Я пробовал различные конфигурации uwsgi (log-master
, log-encoder
...), но безрезультатно. Я могу правильно видеть свои журналы, когда я использую gunicorn, поэтому я подозреваю, что причиной является uwsgi, но я хотел бы избежать изменения моего wsgi сервера, если это возможно.
Спасибо