打印错误日志,供以后参考
来源:互联网 发布:网络赚小钱 编辑:程序博客网 时间:2024/06/12 01:01
供以后查阅
//itcastlog.h 日志头文件#ifndef _ITCAST_LOG_H_#define _ITCAST_LOG_H_/*#define IC_NO_LOG_LEVEL0#define IC_DEBUG_LEVEL1#define IC_INFO_LEVEL2#define IC_WARNING_LEVEL3#define IC_ERROR_LEVEL4;*//************************************************************************//* const char *file:文件名称int line:文件行号int level:错误级别0 -- 没有日志1 -- debug级别2 -- info级别3 -- warning级别4 -- err级别int status:错误码const char *fmt:可变参数*//************************************************************************///实际使用的Levelextern int LogLevel[5];void ITCAST_LOG(const char *file, int line, int level, int status, const char *fmt, ...);#endif
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdarg.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include "ItcastLog.h"#define ITCAST_DEBUG_FILE_"socketclient.log"#define ITCAST_MAX_STRING_LEN 10240//Level类别#define IC_NO_LOG_LEVEL0#define IC_DEBUG_LEVEL1#define IC_INFO_LEVEL2#define IC_WARNING_LEVEL3#define IC_ERROR_LEVEL4int LogLevel[5] = {IC_NO_LOG_LEVEL, IC_DEBUG_LEVEL, IC_INFO_LEVEL, IC_WARNING_LEVEL, IC_ERROR_LEVEL};//Level的名称char ICLevelName[5][10] = {"NOLOG", "DEBUG", "INFO", "WARNING", "ERROR"};static int ITCAST_Error_GetCurTime(char* strTime){struct tm*tmTime = NULL;size_ttimeLen = 0;time_ttTime = 0;tTime = time(NULL);tmTime = localtime(&tTime);//timeLen = strftime(strTime, 33, "%Y(Y)%m(M)%d(D)%H(H)%M(M)%S(S)", tmTime);timeLen = strftime(strTime, 33, "%Y.%m.%d %H:%M:%S", tmTime);return timeLen;}static int ITCAST_Error_OpenFile(int* pf){charfileName[1024];memset(fileName, 0, sizeof(fileName));#ifdef WIN32sprintf(fileName, "c:\\itcast\\%s",ITCAST_DEBUG_FILE_);#elsesprintf(fileName, "%s/log/%s", getenv("HOME"), ITCAST_DEBUG_FILE_);#endif *pf = open(fileName, O_WRONLY|O_CREAT|O_APPEND, 0666); if(*pf < 0) { return -1; }return 0;}static void ITCAST_Error_Core(const char *file, int line, int level, int status, const char *fmt, va_list args){ char str[ITCAST_MAX_STRING_LEN]; int strLen = 0; char tmpStr[64]; int tmpStrLen = 0; int pf = 0; //初始化 memset(str, 0, ITCAST_MAX_STRING_LEN); memset(tmpStr, 0, 64); //加入LOG时间 tmpStrLen = ITCAST_Error_GetCurTime(tmpStr); tmpStrLen = sprintf(str, "[%s] ", tmpStr); strLen = tmpStrLen; //加入LOG等级 tmpStrLen = sprintf(str+strLen, "[%s] ", ICLevelName[level]); strLen += tmpStrLen; //加入LOG状态 if (status != 0) { tmpStrLen = sprintf(str+strLen, "[ERRNO is %d] ", status); } else { tmpStrLen = sprintf(str+strLen, "[SUCCESS] "); } strLen += tmpStrLen; //加入LOG信息 tmpStrLen = vsprintf(str+strLen, fmt, args); strLen += tmpStrLen; //加入LOG发生文件 tmpStrLen = sprintf(str+strLen, " [%s]", file); strLen += tmpStrLen; //加入LOG发生行数 tmpStrLen = sprintf(str+strLen, " [%d]\n", line); strLen += tmpStrLen; //打开LOG文件 if(ITCAST_Error_OpenFile(&pf)){return ;} //写入LOG文件 write(pf, str, strLen); //IC_Log_Error_WriteFile(str); //关闭文件 close(pf); return ;}void ITCAST_LOG(const char *file, int line, int level, int status, const char *fmt, ...){ va_list args;//判断是否需要写LOG//if(level!=IC_DEBUG_LEVEL && level!=IC_INFO_LEVEL && level!=IC_WARNING_LEVEL && level!=IC_ERROR_LEVEL)if(level == IC_NO_LOG_LEVEL){return ;}//调用核心的写LOG函数 va_start(args, fmt); ITCAST_Error_Core(file, line, level, status, fmt, args); va_end(args); return ;}
0 0
- 打印错误日志,供以后参考
- StringUtils小结,供以后参考
- 备份一个Makefile文档,供以后参考
- 供自己参考link2005错误
- 很好的一个分析bug的文章,供以后疑难bug参考,转一下:一次segfault错误的排查过程
- 写的一个更新触发器,供以后参考备查
- 出行所带物品列表(供以后参考)
- Android 中打印日记的妙用(转发:供以后学习)
- 不打印错误日志
- adb打印错误日志
- 如何打印错误日志
- 参考dubbo 利用hash一致性做负载均衡[代码记录,供以后参考]
- 某个课程设计时用到的SQL脚本,贴在这里供自己以后参考一下
- SSH中主要的配置文件记录,省得自己以后忘了,供自己参考
- python语言的解释性执行问题(备份一下,以供以后学习参考)
- android项目知识点总结-(个人习惯 供自己以后参考 请勿评论)
- scala常见语法,供以后参考(2017年8月20号)
- jsp错误页面打印日志
- delphi调用C#webservice接口的中文编码问题
- java 加密之Base64示例
- 小测验:你对HTML5了解有多少?
- watch命令监测网络数据流量
- 源码中的设计模式略读
- 打印错误日志,供以后参考
- Scala学习笔记(五)----单例,伴生对象,类static写法
- Retrofit入门教程
- iOS使用cycript调试APP技巧
- POJ 1759 Garland 二分答案
- Q
- Mac OS下fis3 安装教程
- Android中使用Canvas绘制简单的图形(一)
- Kaldi学习手记(三): Kaldi 的I/O机制