xaerocom opened a new issue, #49863: URL: https://github.com/apache/airflow/issues/49863
### Apache Airflow version 3.0.0 ### If "Other Airflow 2 version" selected, which one? _No response_ ### What happened? After switch to Airflow 3.0.0 Celery executor is logging only into files (local filesystem) instead of standard out. As we're running Airflow in Kubernetes, we need to scrape task logs from stdout and ship them into Elastic using fluentbit. <img width="1629" alt="Image" src="https://github.com/user-attachments/assets/8c3b47df-28a7-47d6-a208-b44405970f42" /> Worker container details: Apache Airflow version | 3.0.0 executor | CeleryExecutor task_logging_handler | **airflow.providers.elasticsearch.log.es_task_handler.ElasticsearchTaskHandler** sql_alchemy_conn | postgresql+psycopg2://airflow:airflow@postgres/airflow dags_folder | /opt/airflow/dags plugins_folder | /opt/airflow/plugins base_log_folder | /opt/airflow/logs remote_base_log_folder | System info OS | Linux architecture | arm uname | uname_result(system='Linux', node='70b4cb20510b', release='6.12.13-200.fc41.aarch64', version='#1 SMP PREEMPT_DYNAMIC Sat Feb 8 20:30:50 UTC 2025', machine='aarch64') locale | ('C', 'UTF-8') python_version | 3.12.10 (main, Apr 9 2025, 03:37:37) [GCC 12.2.0] python_location | /home/airflow/.local/bin/python Tools info git | NOT AVAILABLE ssh | OpenSSH_9.2p1 Debian-2+deb12u5, OpenSSL 3.0.15 3 Sep 2024 kubectl | NOT AVAILABLE gcloud | NOT AVAILABLE cloud_sql_proxy | NOT AVAILABLE mysql | mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (aarch64) using EditLine wrapper sqlite3 | 3.40.1 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f3alt1 psql | psql (PostgreSQL) 17.4 (Debian 17.4-1.pgdg120+2) Paths info airflow_home | /opt/airflow system_path | /root/bin:/home/airflow/.local/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin python_path | /home/airflow/.local/bin:/usr/local/lib/python312.zip:/usr/local/lib/python3.12:/usr/local/lib/python3.12/lib-dynload:/home/airflow/.local/lib/python3.12/site-packages:/opt/airflow/conf | ig:/opt/airflow/plugins:/opt/airflow/dags airflow_on_path | True Providers info apache-airflow-providers-amazon | 9.6.1 apache-airflow-providers-celery | 3.10.6 apache-airflow-providers-cncf-kubernetes | 10.4.3 apache-airflow-providers-common-compat | 1.6.0 apache-airflow-providers-common-io | 1.5.4 apache-airflow-providers-common-messaging | 1.0.0 apache-airflow-providers-common-sql | 1.26.0 apache-airflow-providers-docker | 4.3.1 **apache-airflow-providers-elasticsearch | 6.2.2** apache-airflow-providers-fab | 2.0.1 apache-airflow-providers-ftp | 3.12.3 apache-airflow-providers-git | 0.0.2 apache-airflow-providers-google | 15.1.0 apache-airflow-providers-grpc | 3.7.3 apache-airflow-providers-hashicorp | 4.1.1 apache-airflow-providers-http | 5.2.2 apache-airflow-providers-microsoft-azure | 12.3.1 apache-airflow-providers-mysql | 6.2.2 apache-airflow-providers-odbc | 4.9.2 apache-airflow-providers-openlineage | 2.2.0 apache-airflow-providers-postgres | 6.1.3 apache-airflow-providers-redis | 4.0.2 apache-airflow-providers-sendgrid | 4.0.1 apache-airflow-providers-sftp | 5.2.1 apache-airflow-providers-slack | 9.0.5 apache-airflow-providers-smtp | 2.0.3 apache-airflow-providers-snowflake | 6.2.2 apache-airflow-providers-ssh | 4.0.1 apache-airflow-providers-standard | 1.0.0 A custom logging class is not working either (no task logs in stdout) ```python import os from airflow.configuration import conf from copy import deepcopy from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG BASE_LOG_FOLDER: str = os.path.expanduser(conf.get_mandatory_value("logging", "BASE_LOG_FOLDER")) LOGGING_CONFIG = deepcopy(DEFAULT_LOGGING_CONFIG) REMOTE_TASK_LOG = None ELASTICSEARCH_HOST: str | None = conf.get("elasticsearch", "HOST") ELASTICSEARCH_END_OF_LOG_MARK: str = conf.get_mandatory_value("elasticsearch", "END_OF_LOG_MARK") ELASTICSEARCH_FRONTEND: str = conf.get_mandatory_value("elasticsearch", "frontend") ELASTICSEARCH_WRITE_STDOUT: bool = conf.getboolean("elasticsearch", "WRITE_STDOUT") ELASTICSEARCH_WRITE_TO_ES: bool = conf.getboolean("elasticsearch", "WRITE_TO_ES") ELASTICSEARCH_JSON_FORMAT: bool = conf.getboolean("elasticsearch", "JSON_FORMAT") ELASTICSEARCH_JSON_FIELDS: str = conf.get_mandatory_value("elasticsearch", "JSON_FIELDS") ELASTICSEARCH_TARGET_INDEX: str = conf.get_mandatory_value("elasticsearch", "TARGET_INDEX") ELASTICSEARCH_HOST_FIELD: str = conf.get_mandatory_value("elasticsearch", "HOST_FIELD") ELASTICSEARCH_OFFSET_FIELD: str = conf.get_mandatory_value("elasticsearch", "OFFSET_FIELD") ELASTIC_REMOTE_HANDLERS: dict[str, dict[str, str | bool | None]] = { "task": { "class": "airflow.providers.elasticsearch.log.es_task_handler.ElasticsearchTaskHandler", "formatter": "airflow", "base_log_folder": BASE_LOG_FOLDER, "end_of_log_mark": ELASTICSEARCH_END_OF_LOG_MARK, "host": ELASTICSEARCH_HOST, "frontend": ELASTICSEARCH_FRONTEND, "write_stdout": ELASTICSEARCH_WRITE_STDOUT, "write_to_es": ELASTICSEARCH_WRITE_TO_ES, "target_index": ELASTICSEARCH_TARGET_INDEX, "json_format": ELASTICSEARCH_JSON_FORMAT, "json_fields": ELASTICSEARCH_JSON_FIELDS, "host_field": ELASTICSEARCH_HOST_FIELD, "offset_field": ELASTICSEARCH_OFFSET_FIELD, }, } LOGGING_CONFIG["handlers"].update(ELASTIC_REMOTE_HANDLERS) LOGGING_CONFIG["loggers"]["airflow.task"]["handlers"] = ["task","console"] ``` ### What you think should happen instead? When remote logging is enabled, Elasticsearch is configured (host) and parameter AIRFLOW__ELASTICSEARCH__WRITE_STDOUT: 'true' is set, a default logging class should redirect a task log to stdout as before (Airflow 2.x). ### How to reproduce A default docker compose running Airflow 3.0.0 with fixed JWT for api and: AIRFLOW__LOGGING__REMOTE_LOGGING: 'true' AIRFLOW__ELASTICSEARCH__HOST: 'http://elastic:9200' AIRFLOW__ELASTICSEARCH__JSON_FORMAT: 'true' AIRFLOW__ELASTICSEARCH__WRITE_STDOUT: 'true' AIRFLOW__ELASTICSEARCH__WRITE_TO_ES: 'false' The Celery worker is not printing a task log to stdout ### Operating System MacOS, podman + docker compose ### Versions of Apache Airflow Providers apache-airflow-providers-amazon | 9.6.1 apache-airflow-providers-celery | 3.10.6 apache-airflow-providers-cncf-kubernetes | 10.4.3 apache-airflow-providers-common-compat | 1.6.0 apache-airflow-providers-common-io | 1.5.4 apache-airflow-providers-common-messaging | 1.0.0 apache-airflow-providers-common-sql | 1.26.0 apache-airflow-providers-docker | 4.3.1 **apache-airflow-providers-elasticsearch | 6.2.2** apache-airflow-providers-fab | 2.0.1 apache-airflow-providers-ftp | 3.12.3 apache-airflow-providers-git | 0.0.2 apache-airflow-providers-google | 15.1.0 apache-airflow-providers-grpc | 3.7.3 apache-airflow-providers-hashicorp | 4.1.1 apache-airflow-providers-http | 5.2.2 apache-airflow-providers-microsoft-azure | 12.3.1 apache-airflow-providers-mysql | 6.2.2 apache-airflow-providers-odbc | 4.9.2 apache-airflow-providers-openlineage | 2.2.0 apache-airflow-providers-postgres | 6.1.3 apache-airflow-providers-redis | 4.0.2 apache-airflow-providers-sendgrid | 4.0.1 apache-airflow-providers-sftp | 5.2.1 apache-airflow-providers-slack | 9.0.5 apache-airflow-providers-smtp | 2.0.3 apache-airflow-providers-snowflake | 6.2.2 apache-airflow-providers-ssh | 4.0.1 apache-airflow-providers-standard | 1.0.0 ### Deployment Docker-Compose ### Deployment details _No response_ ### Anything else? _No response_ ### Are you willing to submit PR? - [ ] Yes I am willing to submit a PR! ### Code of Conduct - [x] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
