2011. 2. 21. 23:59

stdout 와 stderr 출력 보기

안드로이드에서는 Log 를 찍기 위해서, 기존에 사용하던 System.out 대신에 Log 클래스를 사용하도록 권장하고 있습니다. 하지만 기 구현된 컴포넌트를 재활용하거나 app_process 로 실행하는 등의 특별한 경우에는 Log 클래스 대신 System.out 을 사용해야 하는 경우가 반드시 있습니다.

이때, 출력을 redirection 하는 방법이 구글 검색을 하면 자주 발견됩니다. 저도 그렇게 해서 지금까지 사용해 왔구요. (http://tech.chitgoks.com/2008/03/17/android-showing-systemout-messages-to-console/)

한데, 새로운 사실을 알았습니다. System.out 의 로그를 보는 방법이 정말 간단합니다. (최근 SDK 에 업데이트 되었을까요? eclair 이후에는 adb 페이지를 본적이 없어서 말이죠 .... 끙...)


에 "Viewing stdout and stderr" 을 보면 나와 있습니다.

번역하면 다음과 같습니다. 

 디폴트로, 안드로이드 시스템은 stdout (System.out) 와 stderr(System.err) 의 출력을 /dev/null 로 전송한다. Dalvi VM 을 실행하는 프로세스 내에서는, 시스템의 출력을 로그 파일에 전송하도록 할 수 있다. 이 경우, 시스템은 해당 메시지를 I(영문) 우선순위의 stdout 과 stderr  태그를 가진 로그를 전송한다. (아래 그림에서 System.out 이라고 찍힌 부분)

이런식으로 출력을 재지정하기 위해서는, 실행중인 에뮬레이터 또는 장치를 멈추고, setprop 명령을 이용하여 출력 재지정을 활성화 해야 한다. 

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start


시스템은 에뮬레이터 또는 장치가 종료될 때까지 이 설정을 유지한다. 에뮬레이터 또는 장치에 디폴트로 설정하기 위해서는, /data/local.prop 에 이 값을 추가할 수 있다.


/data/local.prop 에 관한 내용은 아래 링크 참고:

!!! 저게 항상 찍히는데 확인 필요~