application
import android.util.Log;
Log.v();
Log.d();
Log.i();
Log.w();
Log.e();
Log.wtf();
Log.wtfStack();
framework java
import android.util.Slog;
Slog.v();
Slog.d();
Slog.i();
Slog.w();
Slog.e();
Slog.wtf();
Slog.wtfQuiet();
Slog.wtfStack();
framework native
c言语风格
#include <cutils/log.h>
LOG_ALWAYS_FATAL_IF(...);
LOG_ALWAYS_FATAL(...);
LOG_FATAL_IF(...);
LOG_FATAL(...);
ALOG_ASSERT(...);
ALOGV(...);
ALOGV_IF(...);
ALOGD(...);
ALOGD_IF(...);
ALOGI(...);
ALOGI_IF(...);
ALOGW(...);
ALOGW_IF(...);
ALOGE(...);
ALOGE_IF(...);
c++风格
#include <android-base/logging.h>
LOG(VERBOSE) << "We didn't expect to reach here";
LOG(DEBUG) << "We didn't expect to reach here";
LOG(INFO) << "We didn't expect to reach here";
LOG(WARNING) << "We didn't expect to reach here";
LOG(ERROR) << "We didn't expect to reach here";
LOG(FATAL_WITHOUT_ABORT) << "We didn't expect to reach here";
LOG(FATAL) << "We didn't expect to reach here";
native堆栈打印
1、进入对应的cpp文件,放开#define LOG_NDEBUG 0注释,且变成#define LOG_NDEBUG 1
2、声明头文件
#include<utils/CallStack.h>
#include<utils/Log.h>
3、调用方法:
android::CallStack stack;
stack.update();
stack.log(debug); //输出到logcat
4、mk或者bp中需要链接以下so库:
libutils
libcutils
HAL
#include <utils/Log.h>
LOG_ALWAYS_FATAL_IF(...);
LOG_ALWAYS_FATAL(...);
LOG_FATAL_IF(...);
LOG_FATAL(...);
ALOG_ASSERT(...);
ALOGV(...);
ALOGV_IF(...);
ALOGD(...);
ALOGD_IF(...);
ALOGI(...);
ALOGI_IF(...);
ALOGW(...);
ALOGW_IF(...);
ALOGE(...);
ALOGE_IF(...);
Kernel
通过cat /proc/sys/kernel/printk
这个文件,查看系统默认的日志级别
xxxxx:/ # cat /proc/sys/kernel/printk
7 4 1 7
从左到右:
-
7
代表的是console_loglevel
:控制台的日志级别,printk
输出的信息优先级高于它才会打印到控制台 -
4
代表的是default_message_loglevel
:默认的消息日志级剌,如果printk
没有指定优先级,默认的优先级就是它 -
1
代表的是minimum_console_loglevel
:最低的控制台日志级别,控制台日志级别可被设置的最小值 -
7
代表的是default_console_loglevel
:默认的控制台日志级别,控制台日志级别默认缺省值
可以改变console_loglevel
的级别,从而让更多内核日志打印出来
xxxxx:/ # echo 0 > /proc/sys/kernel/printk
printk(KERN_EMERG "KERN_EMERG\n");
printk(KERN_ALERT "KERN_ALERT\n");
printk(KERN_CRIT "KERN_CRIT\n");
printk(KERN_ERR "KERN_ERR\n");
printk(KERN_WARNING "KERN_WARNING\n");
printk(KERN_NOTICE "KERN_NOTICE\n");
printk(KERN_INFO "KERN_INFO\n");
printk(KERN_DEBUG "KERN_DEBUG\n");