gpt4 book ai didi

android - __android_log_print 相当于 printf

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:01 25 4
gpt4 key购买 nike

我正在尝试将此日志记录语句移植到工作中,因此它将在 linux 和 android 上运行我的#define'ing:

__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

我已经交叉编译我的应用程序以在 Linux 和 Android 上运行。但是,由于 linux 没有我自己尝试做的等价物。

/** ANDROID */
#if defined(__ANDROID__)
#include <android/log.h>
#define LOG_ERROR ANDROID_LOG_ERROR
#define LOG(PRIORITY, fmt, ...) __android_log_print(ANDROID_LOG_UNKNOWN, LOG_TAG, fmt, ##__VA_ARGS__)
/** LINUX */
#elif defined(linux) || defined(__linux) || defined(__linux__)
#define LOG_ERROR LINUX_LOG_ERROR
#define LOG(PRIORITY, fmt, ...) printf(PRIORITY fmt, ##__VA_ARGS__)
#endif

然后在linux下运行时这样使用

LOG(LOG_ERROR, "Testing loggging [ %d ]", test);

有更好的方法吗?

非常感谢您的任何建议,

最佳答案

我设法通过这种方式解决了它。这是完整的解决方案。这将在头文件中

typedef enum levels_tag levels_e;
enum levels_tag {
LOG_UNKNOWN = 0,
LOG_DEFAULT,
LOG_VERBOSE,
LOG_DEBUG,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
LOG_FATAL,
LOG_SILENT,
LOG_LAST
};

/* ANDRIOD IMPLEMENTATION */
#if defined( __ARM_EABI__)
#include <android/log.h>

levels_e levels[LOG_LAST] = {LOG_UNKNOWN,
LOG_DEFAULT,
LOG_VERBOSE,
LOG_DEBUG,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
LOG_FATAL,
LOG_SILENT};

#define LOG_TAG "MODULE_LOG_SIP"

#define LOGGING(PRIORITY, fmt, ...) __android_log_print(levels[PRIORITY], LOG_TAG, fmt, ##__VA_ARGS__)

/* LINUX IMPLEMENTATION */
#elif defined(linux) || defined(__linux) || defined(__linux__)

char *priority_levels[] = {"UNKNOWN",
"DEFAULT",
"VERBOSE",
"DEBUG",
"INFO",
"WARN",
"ERROR",
"FATAL",
"SILENT",
NULL };

#define LOGGING(PRIORITY, fmt, ...) \
do { \
char *priority = priority_levels[PRIORITY]; \
printf("%s/%s:%d [%s] " fmt " \n", __FILE__, __func__, __LINE__, priority, ##__VA_ARGS__); \
} while(0)

#endif

#define LOG(PRIORITY, fmt, ...) LOGGING(PRIORITY, fmt, ##__VA_ARGS__)

在您的源文件中,您只需像这样调用 LOG 宏:

LOG(LOG_FATAL, "Failed to create and initialize application instance [ %d ]", errno);

现在,如果您要在 Linux 上编译,它将使用 printf 语句。如果您要在 Android 上编译,它将使用 __android_log_print 语句。两者都会产生相同格式的输出。

希望这对其他人有帮助。

关于android - __android_log_print 相当于 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19703272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com