在Apache Airflow / Google Cloud Composer中,将INFO级别的日志通过stderr发送可能导致它们被记录为错误级别的日志。 通过更改日志配置,可以避免这种情况。下面是一个示例:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
dag = DAG(
'example_dag',
description='Example DAG',
schedule_interval='0 * * * *',
start_date=datetime(2022, 1, 1),
default_args={
'owner': 'airflow',
'depends_on_past': False,
'email_on_failure': False,
'email_on_retry': False
}
)
def print_info_logs():
# 这是一些INFO级别的日志
print('Example INFO log', flush=True)
print_task = PythonOperator(
task_id='print_task',
provide_context=False,
python_callable=print_info_logs,
dag=dag
)
print_task
在这个例子中,我们使用flush=True来确保实时输出日志。在默认情况下,这将发送到stderr并被记录为错误。 通过更改logging.basicConfig()中的stream参数,可以将其发送到stdout并避免记录为错误:
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
stream=sys.stdout
)
这个更改将确保任何INFO级别的日志都被发送到stdout,从而避免它们被记录为错误。