日志管理模块的主要功能:
(1)在多线程的情况下,按照日志级别正常保存日志信息,记录格式如下:
<日期 时间> [ 日志级别 ] <源文件名称:行号> 日志信息。
(2)可动态调整日志级别、自动日志开关;
(3)在自动日志开关打开的状态下:可按照日期分割日志文件,日志文件不存在时自动生成新的文件。
直接上代码:
sm_log.h
/*
* SMDFS: SaiMin Distributed File System
* Copyright (C) 2013-2014 He Saisong <hesaisong@gmail.com>
*/
#ifndef __SM_LOG_H
#define __SM_LOG_H
#include "sm_core.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SM_LOG_DEBUG 7
#define SM_LOG_INFO 6
#define SM_LOG_NOTICE 5
#define SM_LOG_WARN 4
#define SM_LOG_ERROR 3
#define SM_LOG_CRIT 2
#define SM_LOG_ALERT 1
#define SM_LOG_EMERG 0
#define SM_LOG_FILE_NAME_LENGTH 255
#define SM_LOG_BUF_LENGTH 1024
typedef struct sm_log_s
{
int fd;
pthread_mutex_t lock;
char log_file[SM_LOG_FILE_NAME_LENGTH];
char log_file_src[SM_LOG_FILE_NAME_LENGTH];
volatile char level;
volatile bool autolog;
char buf[SM_LOG_BUF_LENGTH];
time_t log_file_time;
char level_str[8][15];
}sm_log_t;
sm_log_t * sm_log_init(char * file_name, char level, bool autolog);
void sm_log_f(sm_log_t ** log, char * file_name, long line_number, const char * function_name, char level, char * fmt, ...);
#ifdef __cplusplus
#define sm_log(log, level, args...) sm_log_f(&(log), __FILE__, __LINE__, __func__, (level), args)
#else
#define sm_log(log, level, ...) sm_log_f(&(log), __FILE__, __LINE__, __func__, (level), __VA_ARGS__)
#endif
#define sm_log_level_reset_d(log, new_level) \
pthread_mutex_lock(&(log->lock)); \
log->level = new_level; \
pthread_mutex_unlock(&(log->lock));
#define sm_log_autolog_reset_d(log, new_autolog) \
pthread_mutex_lock(&(log->lock)); \
log->autolog = new_autolog; \
pthread_mutex_unlock(&(log->lock));
int sm_log_level_show(char * info, sm_log_t * log);
int sm_log_level_reset(char * info, sm_log_t * log, char * arg);
int sm_log_autolog_show(char * info, sm_log_t * log);
int sm_log_autolog_reset(char * info, sm_log_t * log, char * arg);
void sm_log_destroy(sm_log_t *