logging system of android
DESCRIPTION
explain internal of logging system of Android.TRANSCRIPT
![Page 1: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/1.jpg)
1
Logging System of Android
Tetsuyuki Kobayashi
2010.8.272010.9.2 updated
![Page 2: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/3.jpg)
3
Today's topic
Log from Java program Log from native program Overview of Android Logging
system Tips
![Page 4: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/4.jpg)
Log from Java program
android.util.Log class System.out, System.err
![Page 5: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/9.jpg)
How to read logs
Logcat command Adb logcat Logcat pane in ADT, Eclipse Filtering by tag and priority
![Page 10: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/13.jpg)
Tips
Dumping stack trace Character Encoding Logwrapper Log at init process
![Page 14: Logging system of Android](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081209/555c43a1d8b42a2c068b4f28/html5/thumbnails/18.jpg)
18
Q & A
Thank you for listening!Any comments to blogs are welcome.