[2025/08/03] First Start.
소나무 기운 , 전자제품 개발/생산
📟 ESP-IDF 로그가 안 나와? esp_log_level_set() 호출 순서가 핵심!
ESP-IDF에서 로그를 출력하다 보면, 특정 태그의 로그가 출력되지 않는 문제를 겪을 수 있습니다. 특히 UART(시리얼) 초기화 이후에 esp_log_level_set()을 호출하면 로그가 정상 출력되지 않을 수 있습니다.
이 글에서는 왜 그런 문제가 발생하는지, 그리고 어떻게 해결할 수 있는지를 예제와 함께 설명합니다.
✅ 문제 상황
ESP-IDF에서 로그를 활성화하려고 다음과 같이 작성했다고 가정해 봅시다:
#include "esp_log.h"
#include "driver/uart.h"
void app_main(void)
{
// UART 설정
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
uart_driver_install(UART_NUM_0, 1024, 0, 0, NULL, 0);
uart_param_config(UART_NUM_0, &uart_config);
uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
// 로그 레벨 설정
esp_log_level_set("rf_op", ESP_LOG_INFO);
// 로그 출력
ESP_LOGI("rf_op", "RF Operation initialized.");
}
이렇게 작성하면 "rf_op" 태그의 로그가 출력되지 않는 경우가 많습니다.
🧠 원인 분석
ESP-IDF의 로그 시스템은 초기화 순서에 민감합니다.
esp_log_level_set()은 내부적으로 로그 필터 테이블에 설정을 반영합니다. 하지만 UART 초기화가 이보다 먼저 이루어지면, 로그 출력 경로가 초기화되면서 설정이 무시되거나 덮어쓰여질 수 있습니다.
즉, 시리얼(UART) 설정이 먼저 되면 esp_log_level_set()의 결과가 반영되지 않는 것처럼 보일 수 있습니다.
✅ 해결 방법: 로그 레벨 설정을 먼저 하자
아래처럼 esp_log_level_set()을 UART 설정 전에 호출하면 정상적으로 로그가 출력됩니다.
#include "esp_log.h"
#include "driver/uart.h"
void app_main(void)
{
// 먼저 로그 레벨 설정
esp_log_level_set("rf_op", ESP_LOG_INFO);
// UART 설정
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
uart_driver_install(UART_NUM_0, 1024, 0, 0, NULL, 0);
uart_param_config(UART_NUM_0, &uart_config);
uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
// 로그 출력
ESP_LOGI("rf_op", "RF Operation initialized.");
}
이제 "rf_op" 태그의 INFO 수준 로그가 정상적으로 UART를 통해 출력됩니다.
✨ 팁: 로그 출력 대상이 바뀔 수 있다는 사실
ESP-IDF는 내부적으로 로그 출력 경로를 변경할 수 있도록 설계되어 있습니다. 예를 들어 esp_log_set_output()을 이용하면 로그를 파일, 소켓 등 다른 출력으로 리디렉션할 수 있습니다. UART 초기화는 이러한 출력 경로 설정에도 영향을 줄 수 있으므로, 로그 설정은 항상 먼저!
🔖 정리
- esp_log_level_set()은 특정 태그의 로그 필터링을 설정하는 함수입니다.
- UART 설정 전에 호출해야 로그가 정상 출력됩니다.
- 출력 경로가 바뀌면 로그 레벨 설정이 무시될 수 있습니다.
참고문헌
마무리5
틀린 부분이나 질문은 댓글 달아주세요.
즐거운 하루 보내세요. 감사합니다.
'ESP32' 카테고리의 다른 글
| ESP-AT 사용자 가이드 시작하기 (0) | 2025.08.12 |
|---|---|
| 📍 AT 유저 가이드 메인 페이지 – 타겟 선택 안내 (0) | 2025.08.11 |
| 🔄 ESP32 WiFi OTA 업데이트 시스템 구현하기 (0) | 2025.07.01 |
| ESP32: Wi-Fi와 BLE를 번갈아 켜는 예제 코드 (0) | 2025.07.01 |
| ESP32-C3 AT Command 시리얼 포트 변경하기 (0) | 2024.01.15 |
댓글