Add log module
This commit is contained in:
parent
d72aebcd09
commit
c85c6cc819
|
@ -0,0 +1,103 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file log.c
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief cStuff log module source file
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
#include <time.h>
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
cstuff_log_init(CStuffLog self, uint8_t level)
|
||||||
|
{
|
||||||
|
self->target = stderr;
|
||||||
|
self->level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
cstuff_log_release(CStuffLog self)
|
||||||
|
{
|
||||||
|
if (self->target != stderr)
|
||||||
|
fclose(self->target);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CStuffRetcode
|
||||||
|
cstuff_log_set_file(CStuffLog self, const char *filename)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if (!(fp = fopen(filename, "a")))
|
||||||
|
return CSTUFF_SYSCALL_ERROR;
|
||||||
|
|
||||||
|
self->target = fp;
|
||||||
|
return CSTUFF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
cstuff_log_printf(CStuffLog self, int level, const char *format, ...)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
va_list vl;
|
||||||
|
|
||||||
|
va_start(vl, format);
|
||||||
|
result = cstuff_log_vprintf(self, level, format, vl);
|
||||||
|
va_end(vl);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
if (self->level & level) {
|
||||||
|
FILE *f = self->target;
|
||||||
|
char *label;
|
||||||
|
time_t rawtime;
|
||||||
|
char strtime[32+1];
|
||||||
|
struct tm timeinfo;
|
||||||
|
|
||||||
|
time(&rawtime);
|
||||||
|
localtime_r(&rawtime, &timeinfo);
|
||||||
|
strftime(strtime, 32, "%F %T", &timeinfo);
|
||||||
|
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case CSTUFF_LOG_ERROR:
|
||||||
|
label = "!!";
|
||||||
|
break;
|
||||||
|
case CSTUFF_LOG_ALERT:
|
||||||
|
label = "~!";
|
||||||
|
break;
|
||||||
|
case CSTUFF_LOG_DEBUG:
|
||||||
|
label = "**";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
label = "--";
|
||||||
|
}
|
||||||
|
|
||||||
|
result = fprintf(f, "%s %s ", strtime, label);
|
||||||
|
result += vfprintf(f, format, vl);
|
||||||
|
fputc('\n', f);
|
||||||
|
result++;
|
||||||
|
fflush(f);
|
||||||
|
} else {
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file log.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief cStuff log module header file
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/cStuff/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF
|
||||||
|
#define CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "retcode.h"
|
||||||
|
|
||||||
|
#define CSTUFF_LOG_OFF (0)
|
||||||
|
#define CSTUFF_LOG_ERROR (1<<0)
|
||||||
|
#define CSTUFF_LOG_ALERT (1<<1)
|
||||||
|
#define CSTUFF_LOG_STATE (1<<2)
|
||||||
|
#define CSTUFF_LOG_DEBUG (1<<3)
|
||||||
|
#define CSTUFF_LOG_ALL (0xFF)
|
||||||
|
|
||||||
|
struct cstuff_log {
|
||||||
|
FILE *target;
|
||||||
|
uint8_t level;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct cstuff_log * CStuffLog;
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
cstuff_log_init(CStuffLog self, int level);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
cstuff_log_release(CStuffLog self);
|
||||||
|
|
||||||
|
|
||||||
|
CStuffRetcode
|
||||||
|
cstuff_log_set_file(CStuffLog self, const char *filename);
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
cstuff_log_printf(CStuffLog self, int level, const char *format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl);
|
||||||
|
|
||||||
|
#endif /* !CSTUFF_LOG_H */
|
Loading…
Reference in New Issue