Serial output logger based on the LoggerInterface

Dependencies:   LoggerInterface

LogIt.cpp

Committer:
sillevl
Date:
2016-11-24
Revision:
0:0c84a9b17408
Child:
1:5c3eeae51c21

File content as of revision 0:0c84a9b17408:

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

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

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

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

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

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

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

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

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

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

void LogIt::log(Level level, char* message, ...)
{
    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;
}