/*********************************************************************************
* Copyright: (C) 2022 LingYun IoT System Studio
* All rights reserved.
*
* Filename: logger.c
* Description: This file
*
* Version: 1.0.0(15/04/22)
* Author: LingYun <[email protected]>
* ChangeLog: 1, Release initial version on "15/04/22 10:38:49"
*
********************************************************************************/
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <stdarg.h>
#include <string.h>
#include "logger.h"
/*
* Program name variable is provided by the libc
*/
extern const char* __progname;
#define PROGRAM_NAME __progname
/*
* Logger internal sctructure
*/
typedef struct logger_s {
FILE *fp;
int loglevel;
int use_stdout;
} logger_t;
static struct logger_s g_logger;
static const char* LOG_LEVELS[] = {
LOG_STRING_ERROR,
LOG_STRING_WARN,
LOG_STRING_INFO,
LOG_STRING_DEBUG
};
/*
* initial logger system
*/
int logger_init(char *filename, int loglevel)
{
logger_term();
g_logger.loglevel = loglevel>LOG_LEVEL_MAX ? LOG_LEVEL_MAX : loglevel;
/* $filename is NULL or match "stdout" will use standard output */
if( !filename || !strcasecmp(filename, "stdout"))
{
g_logger.use_stdout = 1;
g_logger.fp = stderr;
}
else
{
g_logger.use_stdout = 0;
g_logger.fp = fopen(filename, "a");
if( !g_logger.fp )
{
fprintf(stderr, "Failed to open file '%s': %s", filename, strerror(errno));
return -1;
}
}
return 0;
}
/*
* terminate logger system
*/
void logger_term(void)
{
if( !g_logger.fp )
{
return ;
}
if( !g_logger.use_stdout )
{
fclose(g_logger.fp);
}
g_logger.use_stdout = 0;
g_logger.fp = NULL;
return ;
}
/*
* Logging functions
*/
void log_generic(const int level, const char* format, va_list args)
{
char message[256];
struct tm* current_tm;
time_t time_now;
vsprintf(message, format, args);
time(&time_now);
current_tm = localtime(&time_now);
int res = fprintf(g_logger.fp,
"%s : %02i:%02i:%02i [%s] %s\n"
, PROGRAM_NAME
, current_tm->tm_hour
, current_tm->tm_min
, current_tm->tm_sec
, LOG_LEVELS[level]
, message );
fflush(g_logger.fp);
}
void log_error(char *format, ...)
{
va_list args;
va_start(args, format);
log_generic(LOG_LEVEL_ERROR, format, args);
va_end(args);
}
void log_warn(char *format, ...)
{
if (g_logger.loglevel < LOG_LEVEL_WARN) {
return;
}
va_list args;
va_start(args, format);
log_generic(LOG_LEVEL_WARN, format, args);
va_end(args);
}
void log_info(char *format, ...)
{
if (g_logger.loglevel < LOG_LEVEL_INFO) {
return;
}
va_list args;
va_start(args, format);
log_generic(LOG_LEVEL_INFO, format, args);
va_end(args);
}
void log_debug(char *format, ...)
{
if (g_logger.loglevel < LOG_LEVEL_DEBUG) {
return;
}
va_list args;
va_start(args, format);
log_generic(LOG_LEVEL_DEBUG, format, args);
va_end(args);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计_使用树莓派nbiot获取gps信息项目_项目实战_优质项目.zip (15个子文件)
毕业设计_使用树莓派nbiot获取gps信息项目_项目实战_优质项目
nbiot
Makefile 200B
logger.h 1KB
gps.h 1KB
gps.o 2KB
baud.h 508B
test1
test.c 2KB
test 8KB
a.out 13KB
main.o 1KB
gps.c 1KB
baud.c 1KB
main.c 895B
baud.o 2KB
logger.c 3KB
logger.o 3KB
共 15 条
- 1
资源评论
极智视界
- 粉丝: 2w+
- 资源: 1459
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于SHT25温湿度传感器、FREERTOS、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- C# 屏幕放大取色器 随时随地获取屏幕像素颜色
- 下载安装这个软件.apk
- 【数据集详细解释及案例分析】数据集详细解释及案例分析
- 基于SHT71温湿度传感器、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- 基于TH02温湿度传感器、STM32F103C8T6、LCD1602、FREERTOS的温湿度采集系统proteus仿真设计
- 【TCP-IP协议详细解释及案例分析】TCP-IP协议详细解释及案例分析
- 一文搞懂 LSTM(长短期记忆网络).rar
- 【autosar简介及基本案例解析】autosar简介及基本案例解析
- java模拟斗地主洗牌发牌
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功