Androidでのログ出力

10,645 views
Skip to first unread message

Sue

unread,
Jun 18, 2009, 6:49:45 AM6/18/09
to 日本Androidの会
はじめまして。先日から参加させていただいておりますSueといいます。
2点ほどログ出力で分からないことがありましたのでご質問させていただきます。

1.android.util.Logの動作

Androidではログ出力にandroid.util.Logクラスが用意されており、このクラスを
利用して出力したログはlogcatで確認することができると思いますが、
実機にapkファイルとしてインストールされた後、前述のLogクラスで出力していた
ものはどういう扱いになるのでしょうか。どこかファイルに出力されているのでしょうか?


2.非検査例外のスタックトレース

アプリケーション内で非検査例外が発生した場合、Android側でダイアログが表示され
アプリケーションが終了しますが、その際logcatにスタックトレースが出力されると思います。
上記と同じく、実機にapkファイルとしてインストールされた後、このトレースログは
どこかに出力されているのでしょうか?

以上、宜しくお願いいたします。

Katsuhiko Sato

unread,
Jun 18, 2009, 7:10:37 AM6/18/09
to android-g...@googlegroups.com
ユビラボ佐藤です

インラインにて

>
> はじめまして。先日から参加させていただいておりますSueといいます。
> 2点ほどログ出力で分からないことがありましたのでご質問させていただきます。
>
> 1.android.util.Logの動作
>
> Androidではログ出力にandroid.util.Logクラスが用意されており、このクラスを
> 利用して出力したログはlogcatで確認することができると思いますが、
> 実機にapkファイルとしてインストールされた後、前述のLogクラスで出力していた
> ものはどういう扱いになるのでしょうか。どこかファイルに出力されているのでしょうか?

実機でも、エミュレータでも同様にlogcatで内容確認できますよ。
実機にadbまたは、ddmsで接続すれば、その内容を確認できます。
下回りの話をすると、logクラスで出力したものは、/dev/log/配下のディレクトリへ
送られます。普通のアプリは/dev/log/mainへ送られます。
もし、ファイルへ保存しておきたい場合は、

adb logcat > xxx.log

等行えば、ファイルへの出力も可能です。


>
>
> 2.非検査例外のスタックトレース
>
> アプリケーション内で非検査例外が発生した場合、Android側でダイアログが表示され
> アプリケーションが終了しますが、その際logcatにスタックトレースが出力されると思います。
> 上記と同じく、実機にapkファイルとしてインストールされた後、このトレースログは
> どこかに出力されているのでしょうか?
>
こちらも エミュレータと同じく、logcat経由で取得可能です。

※実機の内部まで触れるスキルがあるようであれば、
起動時にlogcat出力をファイルへ出力するコマンドを入れてあげれば、
端末内のファイルとしてためておくことも可能です。

やりたいこと次第ですので、もう少し詳しく話してもらえれば他のアドバイスができると
思いますよ。


> 以上、宜しくお願いいたします。
> >

末吉真雄

unread,
Jun 18, 2009, 8:57:39 AM6/18/09
to android-g...@googlegroups.com
ユビラビ佐藤様
 
早速のご返信ありがとうございます。
 
なるほど、/dev/logに送られているんですね。情報有難うございます!
 
ちなみにやりたいことですが、アプリケーションで想定外の例外(バグ)が発生した際に
利用者が任意のタイミング(携帯ですと圏外もありうるので)でアプリケーション開発者にスタックトレース情報とともに
バグレポートを報告できるような機能を実現したいと考えていました。
 
Androidで汎用的な例外ハンドリング/ロギングを実現する方法が分からず、まずはlogcatで出力されている情報が
使えないかと思った次第です。
 
2009/6/18 Katsuhiko Sato <stk...@ubilabo.net>

Katsuhiko Sato

unread,
Jun 18, 2009, 9:37:23 AM6/18/09
to android-g...@googlegroups.com
Sueさん
 
ユビラボ佐藤です
 
であるとすると、実機の下周りまで手が出せる状況なのですね。
下記のような要望ですと、linuxのデーモンレベルで監視するアプリを作るのが
一番だと思います。ユーザーインタフェースとしては、そのデーモンさんが作った
ログファイルを送信確認・要求するようなものにすればよいと思います。
 
送信確認・要求Activityについては、
想定外の例外が起きた際に、勝手にlogcatやdmesgの内容を送るのもあれかと
思いますので、例外が起きた場合のダイアログを出しているところをフックまたは改修して、
それを契機にユーザーに送信内容を確認させて、送信ボタンを押したところで
それをアプリケーション開発者に送るようなものを作ればよいかと思います。
 
状況によってはAndroid全体が死んでしまうような状況も考えられるので、
ログを一度/cacheにでも保存して置いたほうが良いですね。
他に動作しているプロセスやアクティビティー名、メモリ残量等も送るのが
良いと思います。
 
logcatの実装がandroidのレポジトリの
/mydroid/system/logcatにありますので、こちらを参考にlog監視とプロセス監視を
行うデーモンプログラムでも起こしてみてはいかがでしょうか?
ログの表示は/dev/log/配下のファイルをreadにて、ログの出力サイズチェック、
ログのクリアはioctlで行っています。
 
Android上のアプリは、そのデーモンが/cacheにあるログディレクトリを監視し
送信要求入りのログに関して送信確認・送信をするようなアプリでいいのかな、と
思います。
 
こういうのは、標準の仕組みで導入されても良いと思うので、
ログファイルの仕様含めてgoogleに提案しちゃうのはありだと思います。

Mitsuo Mizuno

unread,
Jun 18, 2009, 7:56:52 PM6/18/09
to android-g...@googlegroups.com
みずの@組み込みWGです。

アプリケーションが5秒間以上反応しないと「Application is not
respoding」というダイアログが表示されます。この状態のログ
は、/data/anr/trace.txtに保存されています。

ではでは。

2009/6/18 Katsuhiko Sato <stk...@ubilabo.net>:

Sue

unread,
Jun 21, 2009, 9:12:41 AM6/21/09
to android-g...@googlegroups.com
Sueです。

> 佐藤様
細かなアドバイス有難うございます!
いろいろと試行錯誤しながらやってみます。

> みずの様
なるほど、ANRのログはtraces.txtに出力されるんですね。
勉強になります。


2009/6/19 Mitsuo Mizuno <mizmi...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages