#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <errno.h>
#include <stdarg.h>
enum LogLevel
{
LOGLEVEL_EMERG = 0, /* system is unusable /
LOGLEVEL_ALERT, / action must be taken immediately /
LOGLEVEL_CRIT, / critical conditions /
LOGLEVEL_ERR, / error conditions /
LOGLEVEL_WARNING, / warning conditions /
LOGLEVEL_NOTICE, / normal but significant condition /
LOGLEVEL_INFO, / informational /
LOGLEVEL_DEBUG, / debug-level messages */
};
#define PRINTFK_LOG_BUF_MAX 512
void printfk(enum LogLevel level, const char *fmt, …)
{
va_list args;
int log_fd;
int ret;
char buf[PRINTFK_LOG_BUF_MAX] = {0};
if ((level < LOGLEVEL_EMERG) || (level > LOGLEVEL_DEBUG) || (NULL == fmt)) {
return;
}
buf[0] = '<';
buf[1] = '0' + level;
buf[2] = '>';
va_start(args, fmt);
vsnprintf(&buf[3], (PRINTFK_LOG_BUF_MAX - 3), fmt, args);
log_fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC);
if (-1 != log_fd) {
ret = write(log_fd, buf, sizeof(buf));
close(log_fd);
}
va_end(args);
}
int main(void)
{
int a = 10;
char *s = “abcdefgh”;
printfk(LOGLEVEL_DEBUG, “[xxx] bbbbbbbbb”);
printfk(LOGLEVEL_DEBUG, “%d, %s”, a, s);
}