Ведение воздушного потока мне кажется немного сложным в Airflow.
Одна из причин заключается в том, что регистрация делится на несколько частей.
Например, конфигурация регистрации для Airflow полностью отличается от конфигурации веб-сервера gunicorn (журналы «спама», которые вы упоминаете в своих сообщениях, происходят от gunicorn).
Чтобы решить эту проблему со спамом, я немного изменил bin / cli.py в Airflow, добавив несколько строк в функцию webserver ():
if args.log_config:
run_args += ['--log-config', str(args.log_config)]
(ради краткости я не вставил код для обработки аргумента)
А затем, что касается файла конфигурации журнала, у меня есть что-то похожее на:
[loggers]
keys=root, gunicorn.error, gunicorn.access
[handlers]
keys=console, error_file, access_file
[formatters]
keys=generic, access
[logger_root]
level=INFO
handlers=console
[logger_gunicorn.error]
level=INFO
handlers=error_file
propagate=0
qualname=gunicorn.error
[logger_gunicorn.access]
level=INFO
handlers=access_file
propagate=1
qualname=gunicorn.access
[handler_console]
class=StreamHandler
formatter=generic
args=(sys.stdout, )
[handler_error_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=generic
args=('/home/airflow/airflow/logs/webserver/gunicorn.error.log',)
[handler_access_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=access
args=('/home/airflow/airflow/logs/webserver/gunicorn.access.log',)
[formatter_generic]
format=[%(name)s] [%(module)s] [%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s
#format=[%(levelname)s] %(asctime)s [%(process)d] [%(levelname)s] %(message)s
datefmt=%Y-%m-%d %H:%M:%S
class=logging.Formatter
[formatter_access]
format=%(message)s
class=logging.Formatter
Обратите внимание на "тип распространения = 0" в gunicorn.error, который позволяет избежать спама в вашем стандартном выводе. У вас все еще они есть, но, по крайней мере, они локализованы в /home/airflow/airflow/logs/webserver/gunicorn.error.log, который должен быть повернут (если честно, я еще не полностью протестировал вращающуюся часть).
Если у меня будет время, я отправлю это изменение как билет Jira для Airflow.