Espressif IDF – Log Messages

Last Updated on 15. October 2026 by SuffocationLink status: OK

Gerade bei der Entwicklung auf dem Microcontroller ist hier und da mal eine Ausgabe wichtig, um zu erahnen, ob der entwickelte Code auch das Richtige macht. Schade ist es, wenn solche Ausgaben dann immer noch das fertige Produkt belasten. Damit der Debugging Code es nicht oder nur bedingt ins Endprodukt schafft, gibt es in nahezu allen Frameworks Mechanismen. An dieser Stelle möchte ich die Mechanismen der IDF vorstellen.

Debugging Nachrichten können mit dem folgenden Makro erzeugt werden.

static const char* TAG = "logname";

ESP_LOGx(TAG, "Text mit Platzhalter für parameter %d %s ... ", parameterliste);

Mögliche Befehle für die einzelnen Level:

IDF Warnlevel Quelle: IDF LoggingLink status: OK

Der Loglevel wird entweder im Menuconfig gesetzt, der höchste ist Verbose und der niedrigste ist Error, hier werden nur noch die Fehler ausgegeben. No output unterdrückt die Logausgabe ganz.

IDF Menuconfig – Debugging Level einstellen

Die Vorkonfiguration kann mit dem folgenden Define überschrieben werden, hierbei muss der Loglevel kleiner gleich dem vorkonfigurierten sein. (Wenn in Menuconfig Loglevel = Info ist, kann er im Define nicht Debug sein):

#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE // ESP_LOG_ERROR ...

Hier der Beispiel Code

Source code main.c (GitHubLink status: OK)

/** idf example
 *
 * Logging example
 * Loglevel can be either configured by menuconfig or by LOG_LOCAL_LEVEL define.
 * Also a module specific loglevel is possible, 
 * but it must be lower or equal to the general defined loglevel. 
 *
 *
 * Some parts are copied from the official idf examples found on 
 * https://docs.espressif.com/projects/esp-idf/en/latest/esp32/
 * 
 * Modified by SteFam @ http://www.fambach.net
 *
 * GPLv3 
 * Blah blah blah, free to use. 
 * I invested some time and mony in those examples if you want to delete this header 
 * please do not forget to mention at least my website, thanks!
*/

static const char* TAG = "LoggingExample";

// Undocument this to override the log level defined by menuconfig
// #define LOG_LOCAL_LEVEL ESP_LOG_INFO
#include "esp_log.h"
#include "sdkconfig.h"




void app_main(void)
{
	// Undocument this if you want a module specific log level
	//esp_log_level_set(TAG,ESP_LOG_INFO);
	
	ESP_LOGE(TAG, "Error Message: %d", 1);
	ESP_LOGW(TAG, "Warn Message: %d", 2 );
	ESP_LOGI(TAG, "Information Message: %d", 3);
	ESP_LOGD(TAG, "Debug Message: %d", 4);
	ESP_LOGV(TAG, "Verbose Message: %d", 5);
	
}

Mit Loglevel Verbose:

Sieht die Ausgabe im Monitor so aus:

Im Loglevel Warning:

Sieht die Ausgabe wie folgt aus:

Je nach Loglevel werden die nicht benötigten Ausgaben durch den Präprozessor aus dem Code entfernt.

Es ist möglich, auf Basis der Tags den Loglevel auf Modulebene zu verfeinern. Auch der Loglevel auf Modulebene kann nicht höher als der gesamte Loglevel sein. D.h. wenn der allgemeine Loglevel Warning ist, kann der modulbezogene Loglevel nur Warning oder Error ausgeben, eine Angabe von Info würde nicht berücksichtigt werden.

Conclusion

Logging ist ein essentieller Mechanismus, noch schöner ist es, wenn er so einfach zu handhaben ist wie in der IDF. Es werden keine zusätzlichen Bibliotheken benötigt und alles funktioniert, wie es soll.

Related Posts

Main contributionLink status: Broken

Sources

IDF-FehlercodesLink status: OK

IDF- FehlerbehandlungLink status: OK

DateChangeAuthor
15.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)Suffocation
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, GrammatikSuffocation
03.10.2026Log-Liste eingefügtSuffocation
07.01.2021Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *