log mylog
来源:互联网 发布:win10不能显示可用网络 编辑:程序博客网 时间:2024/06/04 20:11
- /*
- * 支持linux,windows平台,不支持UNICODE
- * 用例:
- #include "mylog.h"
- #ifdef _WIN32
- int tmain(int argc, _TCHAR* argv[])
- #else
- int main(int argc, char* argv[])
- #endif
- {
- log_init("1.txt");
- //log_init(NULL);
- L_ENTER();
- L_FATAL(_TEXT("fatal %d\n"), 1);
- L_ERROR(_TEXT("fatal %d\n"), 1);
- L_WARNING(_TEXT("fatal %d\n"), 1);
- L_INFO(_TEXT("fatal %d\n"), 1);
- L_DEBUG(_TEXT("fatal %d\n"), 1);
- L_TRACE(_TEXT("fatal %d\n"), 1);
- L_LEAVE();
- return 0;
- }
- */
- #ifndef __MYLOG_H__
- #define __MYLOG_H__
- // 日志格式
- //1812::INFO::2014-04-15 14:48:54::log_version::0.1.0.0
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stdio.h>
- #include <stdint.h>
- #include <time.h>
- #include <wchar.h>
- #ifdef _WIN32
- #include <windows.h>
- #else
- #include <sys/types.h>
- #include <unistd.h>
- #endif
- enum LOG_LEVEL_ {
- LOG_LEVEL__TRACE = 0,
- LOG_LEVEL__DEBUG,
- LOG_LEVEL__INFO,
- LOG_LEVEL__WARNING,
- LOG_LEVEL__ERROR,
- LOG_LEVEL__FATAL
- };
- /*
- * 配置
- * MY_DEFAULT_LOG_FILE: 默认日志文件名
- * MY_DEFAULT_LOG_LEVEL: 默认输出的日志级别
- */
- #define MY_DEFAULT_LOG_FILE "log.txt"
- #define MY_DEFAULT_LOG_LEVEL LOG_LEVEL__DEBUG
- /**************************************************************************/
- /**************************************************************************/
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- #ifndef _WIN32
- #define _TEXT(x) x
- #define _tfopen fopen
- #define _ftprintf fprintf
- #define GetCurrentThreadId getpid
- #define TCHAR char
- #endif
- #undef LOG_FILE_NAME
- #define LOG_FILE_NAME _TEXT(MY_DEFAULT_LOG_FILE)
- static uint32_t log_level = MY_DEFAULT_LOG_LEVEL;
- static uint32_t log_enable = FALSE;
- static FILE *fp = NULL;
- #ifdef _WIN32
- # pragma warning(push)
- /* C4996: _CRT_SECURE_NO_WARNINGS. */
- # pragma warning(disable: 4996)
- #endif
- uint32_t log_init(const TCHAR* filename)
- {
- if ( filename == NULL ) {
- filename = LOG_FILE_NAME;
- }
- if ( fp != NULL ) {
- fclose(fp);
- }
- fp = _tfopen(filename, _TEXT("a+"));
- if ( fp == NULL ) {
- _ftprintf(stderr, _TEXT("open %s failed, log disable\n"), filename);
- return FALSE;
- }
- log_enable = TRUE;
- return TRUE;
- }
- #ifdef _WIN32
- # pragma warning(pop)
- #endif
- void current_time(TCHAR *out, int out_len)
- {
- time_t timer;
- timer = time(NULL);
- #ifdef _WIN32
- struct tm today;
- localtime_s(&today, &timer);
- strftime(out, out_len, "%Y-%m-%d %H:%M:%S", &today);
- #else
- struct tm *today;
- today = localtime(&timer);
- strftime(out, out_len, "%Y-%m-%d %H:%M:%S", today);
- #endif
- }
- #define MYLOG(level, fmt, ...) do \
- { \
- if ( log_enable && level >= log_level ) { \
- static TCHAR level_as_string[][8] = {_TEXT("TRACE"), _TEXT("DEBUG"), _TEXT("INFO "), \
- _TEXT("WARN "), _TEXT("ERROR"), _TEXT("FATAL")}; \
- TCHAR datetime_str[20]; \
- current_time(datetime_str, sizeof(datetime_str)); \
- _ftprintf(fp, _TEXT("%d::%s::%s::%s::")fmt, \
- GetCurrentThreadId(), level_as_string[level], datetime_str, __FUNCTION__, ##__VA_ARGS__); \
- fflush(fp); \
- } \
- } while (0)
- #define L_FATAL(fmt, ...) MYLOG(LOG_LEVEL__FATAL, fmt, ## __VA_ARGS__)
- #define L_ERROR(fmt, ...) MYLOG(LOG_LEVEL__ERROR, fmt, ## __VA_ARGS__)
- #define L_WARNING(fmt, ...) MYLOG(LOG_LEVEL__WARNING, fmt, ## __VA_ARGS__)
- #define L_INFO(fmt, ...) MYLOG(LOG_LEVEL__INFO, fmt, ## __VA_ARGS__)
- #define L_DEBUG(fmt, ...) MYLOG(LOG_LEVEL__DEBUG, fmt, ## __VA_ARGS__)
- #define L_TRACE(fmt, ...) MYLOG(LOG_LEVEL__TRACE, fmt, ## __VA_ARGS__)
- #define L_ENTER() L_DEBUG("Enter.\n")
- #define L_LEAVE() L_DEBUG("Leave.\n")
- #ifdef __cplusplus
- }
- #endif
- #endif
0
上一篇:VIM CSCOPE E259
下一篇:Migrating to the Windows Display Driver Model (WDDM)
相关热门文章
- LNK1123: 转换到 COFF 期间失...
- WIN7访问共享:0x80070035 找不...
- Delphi 2010下载+完美破解...
- vs2010调试C++程序时提示 无...
- VISIO,不规则封闭图形填充方...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- log mylog
- myLog.h
- MyLog工具类
- 日志打印分析工具 mylog 使用wiki
- 日志统一打印的工具类MyLog
- log
- log
- log
- Log
- LOG
- log
- log
- log
- log
- log
- Log
- log
- Log
- JavaWeb基础02----JSP
- VIM CSCOPE E259
- iOS NSFileManager详解 ➕示例(转载请注明出处)
- ScrollView判断是否滑动到底部和顶部
- 基于TCP通信的套接字Socket
- log mylog
- [整理]写Android+PHP+MySQL时遇到的问题
- Migrating to the Windows Display Driver Model (WDDM)
- null和""的区别
- jQuery Ajax之load()方法
- 欢迎使用CSDN-markdown编辑器
- zsh 安装autojump教程 一键直达目录
- Windows Display Driver Model (WDDM) Design Guide
- Spring mvc 406错误:The resource identified by this request is only capable of generating responses wit
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
杏鲍菇做法大全
杏鲍菇炒鸡蛋
酱烧杏鲍菇
家常杏鲍菇炒肉
炸杏鲍菇
杏鲍菇炒肉的做法
家常杏鲍菇
杏鲍菇怎么切
杏鲍菇鸡蛋
青辣椒炒杏鲍菇
杏鲍菇炒
杏鲍菇功效
凉拌杏鲍菇的做法
凉拌杏鲍菇做法
杏鲍菇功效与作用
青椒炒杏鲍菇
辣椒炒杏鲍菇
杏鲍菇热量
杏鲍菇用焯水吗
青椒杏鲍菇
杏鲍菇怎么炒
蒜香干煸杏鲍菇
炸杏鲍菇做法
炒杏鲍菇的做法
杏鲍菇营养价值
杏鲍菇怎么做
蒜香杏鲍菇
炸杏鲍菇的做法
杏鲍菇焯水吗
清炒杏鲍菇
油炸杏鲍菇
杏鲍菇胡萝卜
杏鲍菇的营养价值
红烧杏鲍菇
杏鲍菇汤的做法
干煸杏鲍菇的做法
干锅杏鲍菇
杏鲍菇用水焯吗
鱼香杏鲍菇
杏鲍菇怎么炒好吃
杏鲍菇价格