본문 바로가기
ESP32

📟 ESP-IDF 로그가 안 나와? esp_log_level_set() 호출 순서가 핵심!

by 소나무기운 2025. 8. 3.
반응형

[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

 

 
 

 

 

틀린 부분이나 질문은 댓글 달아주세요.

즐거운 하루 보내세요. 감사합니다.

 

 

반응형

댓글