andorid 自定义log存入文件

//
// Created by darren on 17-10-9.
//

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdarg.h>
#include <time.h>
#include <sys/time.h>
#include "5.log.h"

#define PROCESSNAME  "log.tmp"
#define MAXBUFSIZE 1024

int get_current_dir(char *buf);

int get_time(char *data);

int file_copy(const char *in, const char *out);


int main() {

    int a = 678;
    Log("tian %d", a);
    return 0;
}


int get_current_dir(char *buf) {

    int count;
    count = readlink("/proc/self/exe", buf, MAXBUFSIZE);
    if (count < 0 || count >= MAXBUFSIZE) {
        printf("Failed\n");
        return -1;
    }
    buf[count] = '\0';
    char *tmp = strrchr(buf, '/');
    if (!tmp) {
        return -2;
    }
    buf[strlen(buf) - strlen(tmp)] = '\0';
    return 0;
}

int get_time(char *data) {
    if (!data) { return -1; }
    time_t t;
    time(&t);
    struct tm local = {0};
    localtime_r(&t, &local);
    sprintf(data, "%04d-%02d-%02d %02d:%02d:%02d", local.tm_year + 1900,
            local.tm_mon + 1, local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec);
    return 0;
}

long int get_timeStemap() {

    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("second:%ld\n", tv.tv_sec);  //   // printf("millisecond:%ld\n", tv.tv_sec * 1000 + tv.tv_usec / 1000);  //毫秒
   // printf("microsecond:%ld\n", tv.tv_sec * 1000000 + tv.tv_usec);  //微秒
    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

int file_copy(const char *from, const char *to) {

    if (!from || !to) {
        return -1;
    }
    if (access(from, F_OK) != 0) {
        return -2;
    }
    FILE *fp = fopen(from, "r");
    if (!fp) {
        return -3;
    }
    FILE *ft = fopen(to, "w+");
    if (!ft) {
        return -4;
    }
    char tmp[1024];
    size_t len;
    if (len = fread(tmp, 1, sizeof(tmp), fp)) {
        fwrite(tmp, 1, len, ft);
    }
    if (fp) {
        fclose(fp);
    }
    if (ft) {
        fclose(ft);
    }
    return 0;
}


int Log(const char *fm, ...) {
    int buflen = 5120;
    char buf[buflen];
    int i = 0;
    memset(buf, 0, buflen);
    va_list args;
    va_start(args, fm);
    vsnprintf(buf, buflen, fm, args);
    va_end(args);

    char *logpath = (char *) malloc(MAXBUFSIZE);
    get_current_dir(logpath);
    if (access(logpath, 0) != 0) {
        char cmdstr[256] = {0};
        sprintf(cmdstr, "mkdir -p %s", logpath);
        system(cmdstr);
    }
    char fname[256];
    memset(fname, 0, sizeof(fname));
    sprintf(fname, "%s/%s", logpath, PROCESSNAME);

    FILE *logfile = NULL;
    do {
        logfile = fopen(fname, "ab+");
        if (logfile)
            break;
    } while (i < 3);
    if (!logfile) {
        return -2;
    }

    char *pTemp = (char *) malloc(MAXBUFSIZE);
    if (!pTemp) { return -2; }
    get_time(pTemp);

    char *dg = (char *) malloc(MAXBUFSIZE);
    if (!dg) { return -2; }
    sprintf(dg, "%s:%s\n", pTemp, buf);
    printf("%s\n", dg);

    fwrite(dg, 1, strlen(dg), logfile);
    //const char *dest = "/home/darren/ClionProjects/My_test/c++_test/effective_c++_test/log.11";
    if (ftell(logfile) > 15 * 1024 * 1024) { // 15M ,判断文件大小
        fclose(logfile);
        char path[1024];
        sprintf(path, "%s/%ld", logpath, get_timeStemap());
        printf("path:%s\n", path);
        if (!rename(fname, path)) {
            return -5;
        }
    } else {
        fclose(logfile);
    }
    //file_copy(fname, dest);


    if (pTemp) {
        free(pTemp);
        pTemp = NULL;
    }
    if (dg) {
        free(dg);
        dg = NULL;
    }
    if (logpath) {
        free(logpath);
        logpath = NULL;
    }

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值