重定义NSLog

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

//
//  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];
}
时间: 2024-11-06 07:49:19

重定义NSLog的相关文章

iOS项目中重定义NSLog方法

不解释. #ifdef DEBUG // 调试状态, 打开LOG功能 #define MYLog(...) NSLog(__VA_ARGS__) #else // 发布状态, 关闭LOG功能 #define MYLog(...) #endif 版权声明:本文为博主原创文章,转载请注明来源:http://blog.csdn.net/zhangwenhai001

一个完整的以在线重定义方式普通表转分区表的方案

1. 转分区表原因 生产数据库,一张表,一亿多行数据,绝大部分查询按月为维度做时间范围查 询,未分区状态下,查询IO量大,计划以分区截剪的方式减少IO量,提升前前台查询性能 2. 实施目的 将未分区的oXX_XXt_owner.id_oXXXdx_mX表以(stat_XXcle)字段为分区键,以在定义的方式转换成按月分区表的时间范围分区表,利且在线重定义的特性,保留权限的不漏赋以及极少时间的影响生产. 3. 注意事项 (1)       数据库若是双节点,只需在其中一个节点的数据库上实施. (2

重载重写重定义

1.重载:overload,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. class Overload{ public: void V1(int i); void V1(double i); void V1(int i, double j); void V1(double i, int j); int test(int i); //编译报错,不是重载 }; 2.隐藏(重定义):隐藏是指派生类的函数屏

C++纯虚函数、虚函数、实函数、抽象类,重载、重写、重定义

首先,面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承.动态绑定.通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不完全相同的新类,使用动态绑定,可以在一定程度上忽略相似类的区别,而以统一的方式使用它们的对象. 虚函数的作用是实现多态性(Polymorphism),多态性是将接口与实现进行分离,采用共同的方法,但因个体差异而采用不同的策略.纯虚函数则是一种特殊的虚函数.虚函数联系到多态,多态联系到继承. 一.虚函

重写,重定义,重载

> 重写,重定义经常与继承和虚继承一起使用,那么我们一步一步来,先看看重写,重定义到底是什么样子的呢? >重载: 1.它在同一个作用域中 2.函数名必须相同 3.参数个数,类型,顺序不同 4.返回值不作要求 5.virtual关键字不作要求 >重写(覆盖): 1.不在同一个作用域中(即基类与子类中) 2.函数名相同,返回值相同,参数也相同 3.只是在基类同名函数前必须有virtual关键字不能有static. 这时派生类的重写函数就会覆盖基类中的同名函数. >重定义(隐藏): 1.

(转)C++重写、重载和重定义的区别

C++ 重写重载重定义区别 (源自:http://blog.163.com/[email protected]/blog/static/111352259201102441934870/) 1 成员函数重载特征:   a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无 2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: a 不同的范围,分别位于基类和派生类中 b 函数的名字相同 c 参数相同 d 基类函数必须有virtual关键字 3 重定义(隐藏

【转】深入理解C++的动态绑定和静态绑定 &amp; 不要重定义虚函数中的默认参数

为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误.需要理解四个名词:1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的.2.对象的动态类型:目前所指对象的类型.是在运行期决定的.对象的动态类型可以更改,但是静态类型无法更改.关于对象的静态类型和动态类型,看一个示例: class B { } class C : public B { } class D : public B { } D* pD = new D();//p

OpenGL的gl.h出现一堆错误,如重定义什么的

问题:生成时提示 gl.h中出现一堆错误,如 error C2144: 语法错误 : "void"的前面应有";" error C2182: "APIENTRY" : 非法使用"void"类型 error C2086: "int APIENTRY" : 重定义 error C2146: 语法错误 : 缺少";"(在标识符"glClearStencil"的前面) 解决办

海思编译链编译出现__aeabi_unwind_cpp_pr1重定义怎么回事

1.用arm-hisiv100nptl-linux-gcc编译代码,结果发现报错,__aeabi_unwind_cpp_pr1重定义,在librt.a先定义,使用的海思芯片是hi3520d. 2.本来以为是编译链冲突所致,工具链删了又装,只保留一个,还是不行,装的是toolchain_hisi_linux_nptl_install.tgz 3.后来发现在Hi3520_SDK_1.0.5.0中也有工具链,还有三种,分别是hisiv100,hisiv200,hisiv100nptl,就使用SDK包o