重定义NSLog

来源:互联网 发布:python是面向对象吗 编辑:程序博客网 时间:2024/05/17 09:15

.pch中定义

#ifdef TEST_MODE#define NSLog(...) iydLog(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)#endif

调用和NSLog完全一样


实现:
////  iydLogWithFile.m//  ebook////  Created by xiejinniu on 12-7-3.//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.//#import "iydLogWithFile.h"#include <sys/stat.h>#import "systemhelper.h"#import "ebookAppDelegate.h"#define KLOG_FILE_MAX_SIZE (5*1024*1024)static void checkLogFileSizeAndDelete(){    struct stat fileStatus = {0};    const char* logPath = [[SystemHelper GetIYDFileLogPath_str] cStringUsingEncoding:NSUTF8StringEncoding];    if(stat(logPath, &fileStatus) == -1)    {        return;    }        if (fileStatus.st_size > KLOG_FILE_MAX_SIZE)     {        [[NSFileManager defaultManager] removeItemAtPath:[SystemHelper GetIYDFileLogPath_str] error:nil];    }}void iydLog(const char* file, const char* function, int line, NSString* format, ...){[[ebookAppDelegate getInstance].logLock lock];{        checkLogFileSizeAndDelete();                va_list args;        va_start(args, format);                NSMutableString* strContent = [[NSMutableString alloc] initWithFormat:format                                                                    arguments:args];        [strContent appendFormat:@"\r\n[file:%s], [function:%s], [line:%d]\r\n\r\n", file, function, line];                NSLogv(format, args);        const char* cLog = [strContent cStringUsingEncoding:NSUTF8StringEncoding];        const char* logPath = [[SystemHelper GetIYDFileLogPath_str] cStringUsingEncoding:NSUTF8StringEncoding];        FILE* filehandle = fopen(logPath, "ab+");        if (filehandle != NULL)         {            int realsize = fwrite(cLog, 1, strlen(cLog), filehandle);            if (realsize != strlen(cLog))             {                NSLogv(@"write log file error!", nil);            }        }        fclose(filehandle);                [strContent release];        va_end(args);    }[[ebookAppDelegate getInstance].logLock unlock];}



0 0