在Airflow中以Json格式格式化日志 - 问题

3

按照《将Airflow日志格式化为JSON》和其提到的指南,我将log_config复制到了airflow/config文件夹中。但是当我运行webserver或scheduler时,出现了“模块未定义”(init.py定义在config文件夹中)。并且PYTHONPATH被设置为airflow/config。

错误信息为:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airflow/logging_config.py", line 40, in configure_logging
    logging_config = import_string(logging_class_path)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airflow/utils/module_loading.py", line 33, in import_string
    module = import_module(module_path)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'airflow.config'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/bin/airflow", line 25, in <module>
    from airflow.configuration import conf
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airflow/__init__.py", line 47, in <module>
    settings.initialize()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airflow/settings.py", line 374, in initialize
    LOGGING_CLASS_PATH = configure_logging()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airflow/logging_config.py", line 52, in configure_logging
    'Unable to load custom logging from {} due to {}'.format(logging_class_path,err), isinstance('airflow',dict), isinstance('airflow.config',dict), type('airflow.config')
ImportError: ("Unable to load custom logging from airflow.config.log_config.LOGGING_CONFIG due to No module named 'airflow.config'",

现在返回以下内容:ImportError: 由于配置中未找到 logging/logging_level 部分/键,因此无法从 airflow.config.log_config.LOGGING_CONFIG 加载自定义日志记录

1
我也遇到了同样的问题,你解决了吗? - Meny Issakov
2个回答

2
如果你还没有发现,看起来加载 logging_level 的代码正在寻找它在名为 logging 的部分中的 airflow.cfg file 中。
但是,这个属性实际上默认情况下位于 core 部分下。所以如果你将你的代码更改为 LOG_LEVEL: str = conf.get("core", "LOGGING_LEVEL").upper(),这应该能解决你的问题,或者你可以在你的 airflow.cfg 中添加另一个 [logging] 部分。(需要一些重新排序)

1

以下是与Meny Issakov相同的答案:

解决方案

  1. Go to your file airflow.cfg
  2. Include a below the [core] section the following code:
    [logging]
    logging_config_class = log_config.DEFAULT_LOGGING_CONFIG
    
  3. Restart your scheduler

问题原因: 文件airflow.cfg缺少名为[logging]的部分。

问题理解

在调度程序启动时,它访问airflow.cfg中的[core]部分并搜索日志路径。

日志存储位置的信息可以在logging_config_class参数中找到。

但是,即使我们在[core]部分中放置logging_config_class = log_config.DEFAULT_LOGGING_CONFIG,调度程序也不会工作。

为什么?这是因为log_config.py日志处理程序与airflow.cfg存在不匹配。

log_config.py的日志处理程序中,他们使用以下conf.get获取日志配置:

LOG_LEVEL: str = conf.get('logging', 'LOGGING_LEVEL').upper()  
LOG_FORMAT: str = conf.get('logging', 'LOG_FORMAT')

第一个参数是将在airflow.cfg文件中扫描的部分,但默认情况下,在airflow.cfg文件中没有称为[logging]的部分,这会导致调度程序初始化时出现以下错误:

ImportError: 由于在配置中找不到部分/键[logging/fab_logging_level],因此无法从log_config.DEFAULT_LOGGING_CONFIG加载自定义日志记录


这是这个问题的最佳答案,我花了大约3个小时来解决它,感觉自己很蠢。 - Mohammed Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接