python - 看不到从 BashOperator 执行的 python 函数的日志 - Airflow
问题描述
我正在使用 apache 气流BashOperator
。每个BashOperator
执行一个 python 脚本。例如:
from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator
with DAG(dag_id='dag_example', default_args=None,
schedule_interval='0 2 */2 * *',
catchup=False) as dag:
run_task= BashOperator(
task_id='simple_task',
bash_command='python task.py',
dag=dag)
在哪里task.py
:
import logging
def log_fun():
logging.info('Log something')
if __name__=='__main__':
log_fun()
我无法弄清楚为什么日志没有出现在 Airflow 日志中。我检查airflow.cfg
并 logging_level 正确设置为 INFO。
解决方案
AirflowBashOperator
将在不同的进程中运行您的 python 脚本,该进程不会读取您的airflow.cfg
. 因为默认日志级别是WARN
日志不会出现在标准输出中,因此不会出现在您的 Airflow 日志中。
例子:
$ cat task.py
import logging
def log_fun():
logging.info('Log something')
if __name__=='__main__':
log_fun()
$ python task.py
$
如果您在 Python 文件中显式添加日志级别,则会显示日志:
$ cat task2.py
import logging
logging.basicConfig(level=logging.DEBUG)
def log_fun():
logging.info('Log something')
if __name__=='__main__':
log_fun()
$ python task2.py
INFO:root:Log something
$
话虽如此,我认为更好的解决方案是使用 aPythonOperator
而不是 a BashOperator
。它应该使用您在您的设置中设置的相同日志记录配置,airflow.cfg
因为它不会在单独的进程中运行。
推荐阅读
- sql - 节点 js SQL 事务 REST
- google-bigquery - bigquery 蒸汽缓冲区持续多长时间
- django - Gunicorn 因 203/EXEC 失败
- reactjs - 如何在 ReactJs 中重定向到另一个类组件/页面
- javascript - 如何在禁用的 asp.net 下拉列表中添加警报?
- python - SpaCy:如何在整个文档中获取实体的位置?
- cordova - 安装新应用程序时,Cordova 本地存储不清除
- customization - 如何从 Epicor ERP 10 中的代码启动自定义表单?
- r - 如何更改ggplot中条形的对齐方式
- javascript - 如何将 AJAX 响应分配给全局变量?