C: Add report

This commit is contained in:
Markus Koch 2020-05-03 20:02:49 +02:00
commit 4647847eb3
3 changed files with 94 additions and 0 deletions

6
README.MD Normal file
View File

@ -0,0 +1,6 @@
# Code Snippets
Small code snippets that might prove useful again in the future.
## C
* report: Easy to use report statement with log levels

60
c/report/report.c Normal file
View File

@ -0,0 +1,60 @@
/* ----------------------------------------------------------------------------
* C-Report
* ----------------------------------------------------------------------------
* Author : Markus Koch <markus@notsyncing.net>
* Contributors : None
* License : Mozilla Public License (MPL) Version 2
* ----------------------------------------------------------------------------
*/
#include "logging.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
static enum log_level current_log_level = LL_INFO;
static const char *ll_string[] = {
"\x1B[31m\x1B[1m[X] ",
"\x1B[31m[E] ",
"\x1B[33m[W] ",
"\x1B[32m[I] ",
"\x1B[34m[D] ",
"\x1B[34m[d] ",
"[?] "
};
int should_report(enum log_level log_level)
{
return (log_level <= current_log_level);
}
enum log_level report(enum log_level log_level, const char *format, ...)
{
va_list vargs;
if (log_level > LL_COUNT)
log_level = LL_COUNT;
if (should_report(log_level)) {
va_start(vargs, format);
fprintf(stderr, "%s", ll_string[log_level]);
vfprintf(stderr, format, vargs);
fprintf(stderr, "\x1B[0m\n");
va_end(vargs);
}
return log_level;
}
void set_log_level(enum log_level log_level)
{
if (log_level >= LL_COUNT)
log_level = LL_COUNT - 1;
current_log_level = log_level;
}
enum log_level get_log_level()
{
return current_log_level;
}

28
c/report/report.h Normal file
View File

@ -0,0 +1,28 @@
/* ----------------------------------------------------------------------------
* C-Report
* ----------------------------------------------------------------------------
* Author : Markus Koch <markus@notsyncing.net>
* Contributors : None
* License : Mozilla Public License (MPL) Version 2
* ----------------------------------------------------------------------------
*/
#ifndef REPORT_H
#define REPORT_H
#include <errno.h>
enum log_level {LL_CRITICAL = 0,
LL_ERROR,
LL_WARNING,
LL_INFO,
LL_DEBUG,
LL_NOISY,
LL_COUNT};
int should_report(enum log_level log_level);
enum log_level report(enum log_level log_level, const char *format, ...);
void set_log_level(enum log_level log_level);
enum log_level get_log_level();
#endif // REPORT_H