• android ndk开发之Log日志(一)


    //直接上代码:文件名my_log.h

    /*
    
     * my_log.h
    
     *
    
     *  Created on: 2016-7-6
    
     *      Author: zhangyan
    
     */
    
     
    
    #ifndef MY_LOG_H_
    
    #define MY_LOG_H_
    
    #include <android/log.h>
    
    #define MY_LOG_LEVEL_VERBOSE 1
    
    #define MY_LOG_LEVEL_DEBUG 2
    
    #define MY_LOG_LEVEL_INFO 3
    
    #define MY_LOG_LEVEL_WARNING 4
    
    #define MY_LOG_LEVEL_ERROR 5
    
    #define MY_LOG_LEVEL_FATAL 6
    
    #define MY_LOG_LEVEL_SILENT 7
    
    #ifndef MY_LOG_TAG
    
    #    define MY_LOG_TAG __FILE__
    
    #endif
    
    #ifndef MY_LOG_LEVEL
    
    #    define MY_LOG_LEVEL MY_LOG_LEVEL_VERBOSE
    
    #endif
    
    #define MY_LOG_NOOP (void) 0
    
    #define MY_LOG_PRINT(level,fmt,...) 
    
            __android_log_print(level, MY_LOG_TAG, "(%s:%u) %s: " fmt, 
    
                    __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
    
    #if MY_LOG_LEVEL_VERBOSE >= MY_LOG_LEVEL
    
    #    define MY_LOG_VERBOSE(fmt,...) 
    
            MY_LOG_PRINT(ANDROID_LOG_VERBOSE, fmt, ##__VA_ARGS__)
    
    #else
    
    #    define MY_LOG_VERBOSE(...) MY_LOG_NOOP
    
    #endif
    
     
    
    #if MY_LOG_LEVEL_DEBUG >= MY_LOG_LEVEL
    
    #    define MY_LOG_DEBUG(fmt,...) 
    
    MY_LOG_PRINT(ANDROID_LOG_DEBUG,fmt, ##__VA_ARGS__)
    
     #else
    
    #    define MY_LOG_DEBUG(...) MY_LOG_NOOP
    
    #endif
    
     
    
    #if MY_LOG_LEVEL_INFO >= MY_LOG_LEVEL
    
    #    define MY_LOG_INFO(fmt,...) 
    
            MY_LOG_PRINT(ANDROID_LOG_INFO, fmt, ##__VA_ARGS__)
    
    #else
    
    #    define MY_LOG_INFO(...) MY_LOG_NOOP
    
    #endif
    
     
    
    #if MY_LOG_LEVEL_WARNING >= MY_LOG_LEVEL
    
    #    define MY_LOG_WARNING(fmt,...)  
    
            MY_LOG_PRINT(ANDROID_LOG_WARN, fmt, ##__VA_ARGS__)
    
    //        MY_LOG_PRINT(ANDROID_LOG_ERROR, fmt, ##__VA_ARGS__)
    
    #    define MY_LOG_FATAL(fmt,...) 
    
            MY_LOG_PRINT(ANDROID_LOG_FATAL, fmt, ##__VA_ARGS__)
    
    #else
    
    #    define MY_LOG_FATAL(...) MY_LOG_NOOP
    
    #endif
    
     
    
    #if MY_LOG_LEVEL_FATAL >= MY_LOG_LEVEL
    
    #    define MY_LOG_ASSERT(expression, fmt, ...) 
    
    if (!(expression)) { 
    
                __android_log_assert(#expression, MY_LOG_TAG, 
    
                    fmt, ##__VA_ARGS__); 
    
    }
    
    #else
    
    #    define MY_LOG_ASSERT(...) MY_LOG_NOOP
    
    #endif
    
     
    
    /*
    
     宏替换不是很了解的话可以用gcc -E 命令测试
    
      这里##如果可变参数长度为0, 会去掉前面的,
    
      这里的#会把后面的参数当成字符串
    
      例:
    
            #define E(expression) a(#expression)
    
     
    
            E(1>2) -> a("1>2)
    
            E("1>2") ->a("1>2")
    
    */
    
     
    
    #endif /* MY_LOG_H_ */
  • 相关阅读:
    $GLOBALS超级全局变量
    归来
    Mscorlib.dll 里的 System.Internal 类是干嘛的?
    Query Composition using Functional Programming Techniques in C# 3.0
    反射之人千万不能错过的 EmitHelper
    给自己的Blog程序添加对Windows Live Writer的支持
    WebService的应用之winform身份验证
    c# static 的全部用法收集整理
    ASP.NET设置网站图标
    C# 2.0 之 static class (转)
  • 原文地址:https://www.cnblogs.com/zhangyan-2015/p/5647626.html
Copyright © 2020-2023  润新知