Serial output logger based on the LoggerInterface

Dependencies:   LoggerInterface

LogIt.cpp

Committer:
Sille Van Landschoot
Date:
2017-04-02
Revision:
5:8cd22c68d239
Parent:
1:5c3eeae51c21

File content as of revision 5:8cd22c68d239:

#include "LogIt.h"
#include <stdarg.h>
#include <stdio.h>

LogIt::LogIt(mbed::Serial* serial)
{
    this->serial = serial;
}

void LogIt::emergency(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(EMERGENCY, message, args);
    va_end (args);
}

void LogIt::alert(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(ALERT, message, args);
    va_end (args);
}

void LogIt::critical(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(CRITICAL, message, args);
    va_end (args);
}

void LogIt::error(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(ERROR, message, args);
    va_end (args);
}

void LogIt::warning(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(WARNING, message, args);
    va_end (args);
}

void LogIt::notice(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(NOTICE, message, args);
    va_end (args);
}

void LogIt::info(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(INFO, message, args);
    va_end (args);
}

void LogIt::debug(const char* message, ...)
{
    va_list args;
    va_start (args, message);
    log(DEBUG,message, args);
    va_end (args);
}

void LogIt::log(Level level, const char* message, ...)
{
  va_list args;
  va_start (args, message);
  log(level,message, args);
  va_end (args);
}

void LogIt::log(Level level, const char* message, va_list args)
{
    if(level > this->level){ return; }
    char levelString[16];
    switch(level)
    {
        case EMERGENCY:
            strcpy(levelString, "EMERGENCY");
            break;
        case ALERT:
            strcpy(levelString, "ALERT");
            break;
        case CRITICAL:
            strcpy(levelString, "CRITICAL");
            break;
        case ERROR:
            strcpy(levelString, "ERROR");
            break;
        case WARNING:
            strcpy(levelString, "WARNING");
            break;
        case NOTICE:
            strcpy(levelString, "NOTICE");
            break;
        case INFO:
            strcpy(levelString, "INFO");
            break;
        case DEBUG:
            strcpy(levelString, "DEBUG");
            break;
        default:
            strcpy(levelString, "DEBUG");
            break;
    }
    char buffer[256];
    //va_list args;
    //va_start (args, message);
    vsprintf (buffer,message, args);
    serial->printf("%9s: %s\r\n", levelString, buffer);
    //va_end (args);
}

void LogIt::setLevel(Level level)
{
    this->level = level;
}