日志管理模块

本文介绍了一个日志管理模块的设计,它在多线程环境中能按日志级别正常记录日志,记录格式包含日期、时间、日志级别和源文件信息。模块支持动态调整日志级别和自动日志开关。当自动日志开启时,系统会根据日期自动分割日志文件,并在文件缺失时创建新文件。
摘要由CSDN通过智能技术生成

日志管理模块的主要功能:

(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 * 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值