Browse Source

Add log module

master
Ilja Kartašov 1 year ago
parent
commit
c85c6cc819
2 changed files with 161 additions and 0 deletions
  1. +103
    -0
      log.c
  2. +58
    -0
      log.h

+ 103
- 0
log.c View File

@@ -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;
}

+ 58
- 0
log.h View File

@@ -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…
Cancel
Save