c的日志库
来源:互联网 发布:淘宝花呗立刻能还吗 编辑:程序博客网 时间:2024/05/17 06:26
c的json库不知道啥时候才有心情把它写完
我想的是先看看网络之类的再去完一下c的json库
最近又有了个新的玩具,做了一个天猫书店的抓取代码,php写的,打算把它用c重复来一遍,练练手~~
头文件
//// log.h// tmail_spider//// Created by bikang on 16/9/20.// Copyright (c) 2016年 bikang. All rights reserved.//#ifndef __tmail_spider__log__#define __tmail_spider__log__#include <string.h>#include<errno.h>#include <stdlib.h>#include "common.h"//error string#define ERROR_STR() (errno == 0 ? "no error":strerror(errno))//error#define LOG_ERROR(M,...)\fprintf(stderr, "[error](%s:%d,strerror:%s)"M"",__FILE__,__LINE__,ERROR_STR(),##__VA_ARGS__);//info#define LOG_INFO(M,...)\fprintf(stderr, "[error](%s:%d)"M"",__FILE__,__LINE__,##__VA_ARGS__);//error in filevoid log_file(char* cate,int cate_len,const char *filename,const char *str,int len);void log_error_file(const char *filename,const char *str,int len);void log_info_file(const char *filename,const char *str,int len);//error in file more data 运行传递多个参数#endif /* defined(__tmail_spider__log__) */
实现
//// log.c// tmail_spider//// Created by bikang on 16/9/20.// Copyright (c) 2016年 bikang. All rights reserved.//#include <unistd.h>#include <stdio.h>#include "log.h"#define ERROR_STR "error|"#define ERROR_STR_LEN 6#define INFO_STR "info|"#define INFO_STR_LEN 5void log_file(char* cate,int cate_len,const char *filename,const char *str,int len){ FILE *fp = fopen(filename, "a+"); if(fp != NULL){ char date_str[30]; getLocalTime(date_str,1); fwrite(date_str, strlen(date_str), 1, fp); fwrite(cate, cate_len, 1, fp); fwrite(str, len, 1, fp); fwrite("\n", 2, 1, fp); fclose(fp); } return;}void log_error_file(const char *filename,const char *str,int len){ log_file(ERROR_STR,ERROR_STR_LEN,filename,str,len);}void log_info_file(const char *filename,const char *str,int len){ log_file(INFO_STR,INFO_STR_LEN,filename,str,len);}
公共文件
//// common.h// tmail_spider//// Created by bikang on 16/9/20.// Copyright (c) 2016年 bikang. All rights reserved.//#ifndef __tmail_spider__common__#define __tmail_spider__common__#include <stdio.h>void getLocalTime(char*date_str,int flag);#endif /* defined(__tmail_spider__common__) */
实现
//// common.c// tmail_spider//// Created by bikang on 16/9/20.// Copyright (c) 2016年 bikang. All rights reserved.//#include "common.h"#include <stdio.h>#include <stdlib.h>#include <time.h>#include <unistd.h>#include <sys/time.h>void getLocalTime(char*date_str,int flag){ struct tm *nowdate; time_t now; time(&now); nowdate = localtime(&now); if(flag == 1){ sprintf(date_str,"%d-%02d-%02d %02d:%02d:%02d|",(nowdate->tm_year+1900),nowdate->tm_mon+1,nowdate->tm_mday,nowdate->tm_hour,nowdate->tm_min,nowdate->tm_sec); }else{ sprintf(date_str,"%d-%02d-%02d %02d:%02d:%02d",(nowdate->tm_year+1900),nowdate->tm_mon+1,nowdate->tm_mday,nowdate->tm_hour,nowdate->tm_min,nowdate->tm_sec); }}
测试
//// main.c// tmail_spider//// Created by bikang on 16/9/20.// Copyright (c) 2016年 bikang. All rights reserved.//#include<stdio.h>#include<string.h>#include<errno.h>#include<stdlib.h>#include "log.h"#include "common.h"//test errorvoid test_error();//test logvoid test_show_error();//test file logvoid test_file_error();int main(int argc, const char * argv[]) { //test_error(); //test_show_error(); test_file_error(); return 0;}void test_file_error(){ char filename[20] = "/tmp/1.txt"; char mesg[20] = "error mesg可是"; log_error_file(filename,mesg,sizeof(mesg)); log_info_file(filename,mesg,sizeof(mesg)); printf("log file end");}void test_show_error(){ printf("\n"); LOG_ERROR("error"); printf("\n"); LOG_INFO("info");}void test_error(){ printf("error:%s\n",strerror(1)); FILE*fp; extern int errno; char*message; if(NULL==(fp=fopen("/dev/dsp","r+"))) { printf("errno=%d\n",errno); message=strerror(errno); printf("Mesg:%s\n",message); } //exit(0);}
0 0
- c的日志库
- c语言的日志库
- C 实现的 日志模块
- Objective-C的日志宏
- C程序的日志类
- C语言日志系统库
- C/C++log日志库比较
- C/C++log日志库比较
- log日志:简单的log日志输出(C++)
- C语言日志的实现,用宏实现日志
- 用C实现日志文件的记录
- 【C#】最简单的写日志DEMO
- 日志模块的C语言实现
- 日志模块的C语言实现
- 改善Objective-C的日志输出
- C语言简单的日志宏打印
- C语言实现的日志模块
- C语言封装自己的日志函数
- 常用类:
- 数据库SQL语句 SELECT LIKE like用法详解
- Java 遇到问题理解
- Math类:
- 1.2.5 计算机系统的多级层次结构
- c的日志库
- apply和Call区别
- Bitmap的加载和Cache
- 第25周-window程序设计(基础篇)-第3章-注册窗口类别1
- 1110. Complete Binary Tree
- 判断一个数是否为超级素数
- Linux下的地址映射
- 算出具体某一天是星期几
- CEF3开发者系列之工程和代码结构