Android 各层日志Log打印

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");

猜你喜欢

转载自blog.csdn.net/weixin_45767368/article/details/129062301