2 changed files with 161 additions and 0 deletions
@ -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