Airflow 如何检查气流测试的输出?

Airflow 如何检查气流测试的输出?,airflow,Airflow,我尝试了气流教程DAG,它与调度程序一起工作,我可以看到由计划运行生成的日志。但是如果我使用命令行测试,我没有看到输出: airflow test my_tutorial_2 templated 2018-09-08 [2018-09-10 15:41:43,121] {__init__.py:51} INFO - Using executor SequentialExecutor [2018-09-10 15:41:43,281] {models.py:258} INFO - Filling

我尝试了气流教程DAG,它与调度程序一起工作,我可以看到由计划运行生成的日志。但是如果我使用命令行测试,我没有看到输出:

airflow test my_tutorial_2 templated 2018-09-08
[2018-09-10 15:41:43,121] {__init__.py:51} INFO - Using executor SequentialExecutor
[2018-09-10 15:41:43,281] {models.py:258} INFO - Filling up the DagBag from /Users/xiang/Documents/BigData/airflow/dags
[2018-09-10 15:41:43,338] {example_kubernetes_operator.py:54} WARNING - Could not import KubernetesPodOperator: No module named 'kubernetes'
[2018-09-10 15:41:43,339] {example_kubernetes_operator.py:55} WARNING - Install kubernetes dependencies with:     pip install airflow['kubernetes']
这就是所有的输出,而我的输出不在那里

气流版本为:

▶ pip list
Package          Version
---------------- ---------
alembic          0.8.10
apache-airflow   1.10.0

我发现,在将“console”设置为airflow.task logger的处理程序时,您可以查看“airflow test”命令的输出,但它似乎也会导致“airflow run”命令进入无限循环并耗尽内存。因此,我只会在您只希望运行“气流测试”命令的环境中执行此操作

为什么会这样我还不知道,是否有一种方法可以在不破坏“气流运行”的情况下完成这个问题我也不清楚

气流1.10.0的默认日志记录配置具有以下可用记录器:

'loggers': {
    'airflow.processor': {
        'handlers': ['processor'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'airflow.task': {
        'handlers': ['task'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'flask_appbuilder': {
        'handler': ['console'],
        'level': FAB_LOG_LEVEL,
        'propagate': True,
    }
},
airflow.task logger(运行任务时使用的记录器)使用“任务”处理程序:

它(除非更改)将只将任务的输出写入日志文件。如果还希望在stdout中查看输出,则需要将控制台处理程序添加到airflow.task logger使用的处理程序列表中:

这可以通过设置自定义日志记录配置类(覆盖默认配置)或编辑默认设置文件来完成


无论您在何处安装了\u airflow/site packages/airflow/config\u templates/airflow\u local\u settings.py

如果使用Ariflow v1.10,您可以将taskinstance logger的propagate属性设置为True,那么日志记录将传播到使用控制台处理程序的根记录器,并打印到sys.stdout

添加
ti.log.propagate=True

在第589行之后,site packages/airflow/bin/cli.py可以做到这一点。

我在airflow 1.10.0中也遇到了这个问题。如前所述,
气流运行
将进入带有默认设置和控制台处理程序的死亡螺旋。我怀疑1.10.0中的默认日志记录类可能存在错误

我通过将日志处理程序更改为Python的
logging.StreamHandler
(这似乎是Airflow<1.10.0中的默认值)来解决这个问题:


谢谢我在默认设置文件中添加了控制台处理程序,它可以正常工作。但由于我是气流新手,请问如何从DAG文件覆盖此默认配置?我想要的是,在
气流测试期间
,最好将输出打印到控制台,但在调度程序运行时,最好写入文件。您能给我一些关于如何覆盖此设置的提示吗?谢谢您的评论。
'handlers': {
    'console': {
        'class': 'airflow.utils.log.logging_mixin.RedirectStdHandler',
        'formatter': 'airflow',
        'stream': 'sys.stdout'
    },
    'task': {
        'class': 'airflow.utils.log.file_task_handler.FileTaskHandler',
        'formatter': 'airflow',
        'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
        'filename_template': FILENAME_TEMPLATE,
    },
    'processor': {
        'class': 'airflow.utils.log.file_processor_handler.FileProcessorHandler',
        'formatter': 'airflow',
        'base_log_folder': os.path.expanduser(PROCESSOR_LOG_FOLDER),
        'filename_template': PROCESSOR_FILENAME_TEMPLATE,
    },
},
'airflow.task': {
    'handlers': ['task', 'console'],
    'level': LOG_LEVEL,
    'propagate': False,
},
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'formatter': 'airflow',
        'stream': 'ext://sys.stdout'
},
'loggers': {
    'airflow.processor': {
        'handlers': ['console'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'airflow.task': {
        'handlers': ['console'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'flask_appbuilder': {
        'handler': ['console'],
        'level': FAB_LOG_LEVEL,
        'propagate': True,
    }
},
'root': {
    'handlers': ['console'],
    'level': LOG_LEVEL,
}