#include "log.h"
#define FILE_MAX_SIZE (50*1024*1024) // 日志文件最大限制
#define FILE_NAME "stlog.txt" // 日志文件名称
#define LOG_LEVEL_DEFINE LOG_LEVEL_DEBUG // 日志级别
#define MAX_BUF_LEN 800 // 通用缓存最大长度
/**
* @description - 获得当前时间字符
* @param buffer - 时间字符
* @return null
*/
void GetLocalTime(char* buffer) {
time_t raw_time;
struct tm* time_info;
time(&raw_time);
time_info = localtime(&raw_time);
sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d",
(time_info->tm_year+1900), (time_info->tm_mon+1), time_info->tm_mday,
time_info->tm_hour, time_info->tm_min, time_info->tm_sec);
}
/**
* @description - 获得日志文件大小
* @param filename - 文件名字
* @return 文件大小
*/
long GetFileSize(char* filename) {
long length = 0;
FILE *fp = NULL;
fp = fopen(filename, "rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
length = ftell(fp);
}
if (fp != NULL) {
fclose(fp);
fp = NULL;
}
return length;
}
/**
* @description - 写入日志文件
* @param filename - 日志文件
* @param max_size - 日志文件大小限制
* @param buffer - 日志内容
* @param buf_size - 日志内容大小
* @return null
*/
void WriteLogFile(char* filename, long max_size, char* buffer, unsigned buf_size) {
if (filename != NULL && buffer != NULL) {
// 文件超过最大限限制大小则删除
long length = GetFileSize(filename);
if (length > max_size) {
unlink(filename); // 删除文件
}
else {
FILE *fp;
fp = fopen(filename, "at+");
if (fp != NULL) {
int ifd = -1;
ifd = fileno(fp);
flock(ifd, LOCK_EX);
fwrite(buffer, strlen(buffer), 1, fp);
if(ifd != -1) {
flock(ifd, LOCK_UN);
}
fclose(fp);
fp = NULL;
}
}
}
}
/**
* @description - 写日志操作,可以写入文件并可以通过socket发送到本机的日志统一发送程序
* @param level - 日志等级
* @param app_id - 日志所在程序名称
* @param format [in] - 日志内容
* @return null
*/
void WriteLog(LogLevelEnum level, const char *app_id, const char *format, ...) {
if(level < LOG_LEVEL_DEFINE) {
return;
}
char buf[MAX_BUF_LEN - 80] = { 0 };
char log_buff[MAX_BUF_LEN - 40] = { 0 };
char now[32];
char out_buf[MAX_BUF_LEN] = { 0 };
va_list vp;
va_start(vp, format);
vsprintf(buf, format, vp);
va_end(vp);
switch(level) {
case LOG_LEVEL_DEBUG:
snprintf(log_buff, MAX_BUF_LEN - 40, "[D]%s->%s", app_id, buf);
break;
case LOG_LEVEL_INFO:
snprintf(log_buff, MAX_BUF_LEN - 40, "[I]%s->%s", app_id, buf);
break;
case LOG_LEVEL_WARNING:
snprintf(log_buff, MAX_BUF_LEN - 40, "[W]%s->%s", app_id, buf);
break;
case LOG_LEVEL_ERROR:
snprintf(log_buff, MAX_BUF_LEN - 40, "[E]%s->%s", app_id, buf);
break;
default:
return;
}
memset(now, 0, sizeof(now));
GetLocalTime(now);
snprintf(out_buf, MAX_BUF_LEN, "%s:%s\n", now, log_buff);
WriteLogFile(FILE_NAME, FILE_MAX_SIZE, out_buf, strlen(out_buf)); /* 写log文件 */
/* 如果log等级为警告或者错误,将log通过socket client上传 */
if ((level == LOG_LEVEL_WARNING) || (level == LOG_LEVEL_ERROR)) {
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
log.rar (2个子文件)
log
log.c 3KB
log.h 546B
共 2 条
- 1
大朋个大
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论10