進階日誌設定¶
並非所有設定選項都可從 airflow.cfg
檔案取得。此設定檔說明如何設定任務的日誌記錄,因為任務產生的日誌預設不僅記錄在個別檔案中,還必須可透過網頁伺服器存取。
預設情況下,標準 Airflow 組件日誌會寫入 $AIRFLOW_HOME/logs
目錄,但您也可以透過覆寫 Python 日誌記錄器設定來自訂和設定,此設定可透過提供自訂日誌設定物件來完成。您也可以為特定 operators 和任務建立及使用日誌設定。
某些設定選項需要覆寫日誌設定類別。您可以透過複製 Airflow 的預設設定並修改以符合您的需求來完成。
預設設定可以在airflow_local_settings.py 範本中看到,您可以在其中看到使用的日誌記錄器和處理常式。
請參閱設定本機設定以取得如何設定本機設定的詳細資訊。
除了可透過 airflow.cfg
在此設定的自訂日誌記錄器和處理常式外,Airflow 中的日誌記錄方法遵循常見的 Python 日誌記錄慣例,即 Python 物件會記錄到遵循 <package>.<module_name>
命名慣例的日誌記錄器。
您可以在Python 日誌記錄文件中閱讀更多關於標準 Python 日誌記錄類別 (Loggers、Handlers、Formatters) 的資訊。
建立自訂日誌類別¶
您可以透過 airflow.cfg
檔案中的 logging_config_class
選項來設定您的日誌記錄類別。此設定應指定與 logging.config.dictConfig()
相容的設定匯入路徑。如果您的檔案是標準匯入位置,則應設定 PYTHONPATH
環境變數。
按照以下步驟啟用自訂日誌設定類別
首先將環境變數設定為已知目錄,例如
~/airflow/
export PYTHONPATH=~/airflow/
建立一個目錄來儲存設定檔,例如
~/airflow/config
建立名為
~/airflow/config/log_config.py
的檔案,內容如下from copy import deepcopy from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG LOGGING_CONFIG = deepcopy(DEFAULT_LOGGING_CONFIG)
在檔案末尾,新增程式碼以修改預設字典設定。
更新
$AIRFLOW_HOME/airflow.cfg
以包含[logging] logging_config_class = log_config.LOGGING_CONFIG
如果您計劃僅在啟用遠端日誌記錄的情況下擴充/更新設定,您也可以將 logging_config_class
與遠端日誌記錄一起使用。然後,深層複製的字典將包含為您產生的遠端日誌記錄設定,並且您的修改將在新增遠端日誌記錄設定後套用
[logging] remote_logging = True logging_config_class = log_config.LOGGING_CONFIG
重新啟動應用程式。
請參閱模組管理以取得關於 Python 和 Airflow 如何管理模組的詳細資訊。
注意
您可以覆寫組件的標準日誌和「任務」日誌的處理方式。
Operators、Hooks 和任務的自訂日誌記錄器¶
您可以建立自訂日誌記錄處理常式,並將其套用至特定的 Operators、Hooks 和任務。預設情況下,Operators 和 Hooks 日誌記錄器是 airflow.task
日誌記錄器的子項:它們分別遵循 airflow.task.operators.<package>.<module_name>
和 airflow.task.hooks.<package>.<module_name>
的命名慣例。在建立自訂日誌類別後,您可以將特定的日誌記錄器指派給它們。
SQLExecuteQueryOperator 和 HttpHook 的自訂日誌記錄範例
from copy import deepcopy from pydantic.utils import deep_update from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG LOGGING_CONFIG = deep_update( deepcopy(DEFAULT_LOGGING_CONFIG), { "loggers": { "airflow.task.operators.airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator": { "handlers": ["task"], "level": "DEBUG", "propagate": True, }, "airflow.task.hooks.airflow.providers.http.hooks.http.HttpHook": { "handlers": ["task"], "level": "WARNING", "propagate": False, }, } }, )
您也可以使用 logger_name
屬性為 Dag 的任務設定自訂名稱。如果多個任務使用相同的 Operator,但您想要停用其中一些任務的日誌記錄,這會很有用。
自訂日誌記錄器名稱範例
# In your Dag file SQLExecuteQueryOperator(..., logger_name="sql.big_query") # In your custom `log_config.py` LOGGING_CONFIG = deep_update( deepcopy(DEFAULT_LOGGING_CONFIG), { "loggers": { "airflow.task.operators.sql.big_query": { "handlers": ["task"], "level": "WARNING", "propagate": True, }, } }, )
如果您想要限制任務的日誌大小,您可以新增 handlers.task.max_bytes
參數。
限制任務大小的範例
from copy import deepcopy from pydantic.utils import deep_update from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG LOGGING_CONFIG = deep_update( deepcopy(DEFAULT_LOGGING_CONFIG), { "handlers": { "task": { "max_bytes": 104857600, # 100MB } } }, )