이틀에 걸쳐 안드로이드에서 나오는 로그를 파일로 저장하기 위한 삽질을 수행하였다. –_-;;

분명히 헤메는 사람이 있을테니 그런 사람들을 위해 기록을 남겨 놓는다.

logback은 log4j와 같은 건데 안드로이드 용 log4j가 동작이 잘 안되서 이걸 썼다.

 

참고 싸이트는 아래와 같다.

 

http://ismydream.tistory.com/145

http://tony19.github.io/logback-android/

http://logback.qos.ch/manual/appenders.html

http://mantdu.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%A0%80%EC%9E%A5%EC%86%8C-%EA%B2%BD%EB%A1%9C-%EC%96%BB%EC%9D%84%EC%8B%9C-emulater0-%ED%95%B4%EA%B2%B0%EB%B2%95

 

위 글에 적힌 대로 다 따라 하면 된다.

 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

이거 맨 위에 넣어주고

 

org.slf4j.Logger Log = LoggerFactory.getLogger(getClass());

 

이거 선언하고

 

assets 폴더 밑에 logback.xml 파일 하나 만들어서 (확장자가 xml이어야 한다. 도스 창에서 파일 하나 루트에서 만든 다음에 파일 탐색기에서 끌어다 이클립스 해당 폴더로 던지면 복사되어서 들어간다.)

 

<configuration>
  <appender name="FILE" class= "ch.qos.logback.core.FileAppender" >
    <!-- lazy initialization: don't create the file until 1st write -->
    <lazy >true </lazy >

     <file > /storage/emulated/0/aaa/log.txt </file >
    <encoder >
      <pattern >%d{HH:mm:ss.SSS} %msg%n </pattern>
    </encoder >
  </appender >

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root >
</configuration>

 

이 내용 집어 넣고

 

안드로이드매니피스트에

 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 

이거 넣어주면

 

        //Log.debug("" + "\t" + "99999");

 

이런식으로 써주면 로그 파일이 생성되게 된다.

자 그럼 삽질의 포인트가 무엇이냐?

 

파일이 어디에 저장될 것이냐의 문제인데, 안드로이드 내부의 절대 경로를 얻어야 한다.

 

String storage = null;

storage = Environment.getExternalStorageDirectory().getAbsolutePath();

Log.debug(storage);*/

 

이렇게 해주면 안드로이드 외부저장소 절대 경로를 얻을 수 있다.

지금 logback.xml 이 파일 쓰기 상태니까 이걸 logcat으로 내보내기 위해

 

<configuration>

<!-- Create a logcat appender -->

<appender name="logcat" class= "ch.qos.logback.classic.android.LogcatAppender" >

<encoder >

<pattern >%msg </pattern>

</encoder >

</appender >

<!-- Write INFO (and higher-level) messages to logcat -->

<root level="DEBUG">

<appender-ref ref="logcat" />

</root >

</configuration>

 

이 내용으로 잠시 교채해주고 tag: (메인 액티비티 내용 중에서 일부 텍스트)를 이용해서 필터링 하면 외부 저장소 절대 경로를 얻을 수 있다.

 

그리고 로그 파일을 함부로 지우면 안된다.  해당 앱을 끄더라도 안드로이드 파일 탐색기에서 새로 고침하거나 상위 폴더 올라갔다가 내려오기를 반복하면서 파일 사이즈가 증가하는지 확인해야 한다. 만약 지우면 어떻게 되냐고? 파일이 안 써진다.

 

앱을 확실하게 끄려면 홈키를 길게 눌러서 끄기 바란다.

 

그리고 로그 파일 추출하고 나면, 로그 파일을 그냥 지우지 말고, 내용만 완전히 지워서 파일 사이즈를 0으로 나둬야 쓰기가 잘된다. 미리 파일 싸이즈가 0인 동일 이름의 파일을 준비해뒀다가, 바꿔치기 하는게 제일 좋다.

 

삽질한 이유는 어디에 저장을 해야 하는지 몰라서 : 외부 저장소의 절대 경로에 저장해야 한다.

그리고 앱이 완전히 꺼지지도 않았는데 지워서 : 앱 완전히 꺼야 한다.

지우더라도 내용만 지워야 하는데 파일까지 지워서 : 내용만 지우고 파일 남겨둬야 한다.

 

이러면 쉽게 logcat을 이용해서 안드로이드에서 로그 파일을 저장할 수 있다.


WRITTEN BY
가별이
내가 천사의 말 한다 해도

,