프로그래밍/IoT

[Arduino] Serial Log 관리

흔한티벳여우 2020. 9. 14. 17:36
반응형

Arduino를 개발할 때, 우린 주로 Jtag를 사용하는 경우를 제외하곤 대부분 디버깅을 Serial port를 이용하여 디버깅을 합니다. 그런데 로그도 일반 앱처럼 Info, Warn, Debug, Error 단위로 관리는 하지 않죠. 

이를 위한 방법으로 아래와 같이 사용하면 편합니다.

원하는 Log level까지만 표기하도록 전처리기로 선언하여 사용하면 관리가 쉽습니다.

#pragma once

#include <Arduino.h>
#include <stdio.h>

// Change _LOGLEVEL_ to set tracing and logging verbosity
// 0: DISABLED: no logging
// 1: ERROR: errors
// 2: WARN: errors and warnings
// 3: INFO: errors, warnings and informational (default)
// 4: DEBUG: errors, warnings, informational and debug

#ifndef _LOGLEVEL_
#define _LOGLEVEL_ 4
#endif


#define ERROR(x)        if(_LOGLEVEL_>0) { Serial.print("[LOGERROR] "); Serial.println(x); }
#define ERROR1(x,y)     if(_LOGLEVEL_>0) { Serial.print("[LOGERROR] "); Serial.print(x); Serial.print(" "); Serial.println(y); }
#define ERROR_N()       if(_LOGLEVEL_>0) { Serial.println(); }
#define WARN(x)         if(_LOGLEVEL_>1) { Serial.print("[LOGWARN] "); Serial.println(x); }
#define WARN1(x,y)      if(_LOGLEVEL_>1) { Serial.print("[LOGWARN] "); Serial.print(x); Serial.print(" "); Serial.println(y); }
#define WARN_N()        if(_LOGLEVEL_>1) { Serial.println(); }
#define INFO(x)         if(_LOGLEVEL_>2) { Serial.print("[LOGINFO] "); Serial.println(x); }
#define INFO_N()        if(_LOGLEVEL_>2) { Serial.println(); }
#define INFO0(x)        if(_LOGLEVEL_>2) { Serial.print(x); }
#define INFO1(x,y)      if(_LOGLEVEL_>2) { Serial.print("[LOGINFO] "); Serial.print(x); Serial.print(" "); Serial.println(y); }
#define INFO2(x,y,z)    if(_LOGLEVEL_>2) { Serial.print("[LOGINFO] "); Serial.print(x); Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.println(z); }
#define INFO3(x,y,z,m)  if(_LOGLEVEL_>2) { Serial.print("[LOGINFO] "); Serial.print(x); Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.print(z); Serial.print(" "); Serial.println(m); }

#define DEBUG(x)      if(_LOGLEVEL_>3) { Serial.println(x); }
#define DEBUG0(x)     if(_LOGLEVEL_>3) { Serial.print(x); }
#define DEBUG1(x,y)   if(_LOGLEVEL_>3) { Serial.print(x); Serial.print(" "); Serial.println(y); }
#define DEBUG2(x,y,z) if(_LOGLEVEL_>3) { Serial.print(x); Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.println(z); }

 

반응형