logging system of android

18
1 Logging System of Android Tetsuyuki Kobayashi 2010.8.27 2010.9.2 updated

Upload: tetsuyuki-kobayashi

Post on 20-May-2015

4.685 views

Category:

Technology


1 download

DESCRIPTION

explain internal of logging system of Android.

TRANSCRIPT

Page 1: Logging system of Android

1

Logging System of Android

Tetsuyuki Kobayashi

2010.8.272010.9.2 updated

Page 2: Logging system of Android

2

Who am I?

20+ years involved in embedded systems 10 years in real time OS, such as iTRON 10 years in embedded Java Virtual Machine Now GCC, Linux, QEMU, Android, …

Blogs http://d.hatena.ne.jp/embedded/ (Personal) http://blog.kmckk.com/ (Corporate)

Twitter @tetsu_koba

Page 3: Logging system of Android

3

Today's topic

Log from Java program Log from native program Overview of Android Logging

system Tips

Page 4: Logging system of Android

Log from Java program

android.util.Log class System.out, System.err

Page 5: Logging system of Android

android.util.Log

Static methods Log.e, Log.w, Log.i, Log.d, Log.v e,w,i,d,v mean priority/log level

writing log with tag, priority Tag and priority is used by filtering

Static final String LOG_TAG = ”Hello”; ... Log.i(LOG_TAG, ”Hello to log”);

Page 6: Logging system of Android

System.out/System.err

Default instance is com.android.internal.os.AndroidPrintStream

These connects to android.util.Log

System.out.println(”System.out=” + System.out.toString());

Tips: How to identify instance of System.out

Page 7: Logging system of Android

Log from native program

Use liblog library Include <android/log.h> __android_log_print Writing log with tag, priority#include <android/log.h>#define LOGI(...) \ __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) … LIGI(”i=%d, name=%s\n”, i, name);

Page 8: Logging system of Android

Stdout/stderr of native program

These are NOT connected to logging system.

Init process set stdout/stderr to /dev/null for its child processes.

All Java processes, too. JNI native libs, too. Do not use printf (to stdout) in JNI

native libs.

Page 9: Logging system of Android

How to read logs

Logcat command Adb logcat Logcat pane in ADT, Eclipse Filtering by tag and priority

Page 10: Logging system of Android

Log device files

4 channels, each have ring buffer /dev/log/radio – radio-related messages (64KB) /dev/log/event – system/hardware events (256KB) /dev/log/system – system/framwork messages (64KB) /dev/log/main – everything else (64KB)

File permission of each is 0662 owner/group RW, other Write only owner=root, group=log Anyone can write logs, root or log group can read

them

Page 11: Logging system of Android

Overview of Android Logging System

liblogliblog

loggerloggermain radio

event system

logcatlogcat

Native programNative program android.util.Logandroid.util.Log

Java programJava program

com.android.internal.osAndroidPrintStream

com.android.internal.osAndroidPrintStream

adbdadbd adbserveradbserver

Target

Host

ADT in Eclipse

adb logcat

stdout

stdout/stderr

User

Kernel

System.out/System.err

/dev/log/main/dev/log/radio/dev/log/event/dev/log/system

/dev/log/main/dev/log/radio/dev/log/event/dev/log/system

256KB

64KB

64KB

64KB

Page 12: Logging system of Android

Where to read in source code android.util.Log

frameworks/base/core/java/android/util/Log.java com.android.internal.os.AndroidPrintStream

frameworks/base/core/java/com/android/internal/os/AndroidPrintStream.java

Liblog system/core/liblog/

Logcat command system/core/logcat/

Adb command system/core/adb/

Kernel log driver drivers/staging/android/logger.c

Page 13: Logging system of Android

Tips

Dumping stack trace Character Encoding Logwrapper Log at init process

Page 14: Logging system of Android

Dumping stack trace

3 arguments fuctions in android.util.Log class For example: Log.e(String tag, String msg, Throwable tr)

Throwable.printStacktrace() also works Dump to System.err

See also http://blog.kmckk.com/archives/2902690.html

You can put 'new Throwable()'

Page 15: Logging system of Android

Character Encoding Fixed to Utf-8

Not Shift-JIS, Not EUC Use Utf-8 encoding terminal/window to

use logcat adb logcat invoke 'logcat' at serial console

Logcat pane in ADT in Eclipse seems bug. Can not show Japanese character correctly.

Page 16: Logging system of Android

Logwrapper

Logwrapper redirects stdout/stderr to Android Logging system

Easy way to add 'usual' command as Android service lunched from init.

See also http://blog.kmckk.com/archives/2918551.html

Page 17: Logging system of Android

Log at init process

The first process 'init' does not use Android Logging System.

Init writes log to (the same node as) '/dev/kmsg' The same way as 'printk' : kernel log

Page 18: Logging system of Android

18

Q & A

Thank you for listening!Any comments to blogs are welcome.