2013-07-16 4 views
2

로그 문을 sdcard에 쓰려고합니다. 내가 그것을하기로 결정한 방법은 응용 프로그램 개체를 통해 sdcard에 파일을 만드는 것입니다. 이 방법은 정적 메서드 logToSdcard() 응용 프로그램의 모든 위치에서 호출 할 수 있습니다.android에서 sdcard에 로그 문 작성하기

포함 폴더 "/ RR3log /"가 만들어 지지만 "rr3LogFile.txt"라는 자체 파일에 기록됩니다. 그래서 여러 개의 rr3LogFile 파일에 각각 하나의 스테이 션이 있습니다.

모든 문을 하나의 rr3LogFile 파일에 쓸 수 있습니까? 미리 감사드립니다.

public class NfcScannerApplication extends Application{ 

    @Override 
    public void onCreate() { 
     super.onCreate(); 




     File storageDir = new File(Environment 
       .getExternalStorageDirectory(), "/RR3log/"); 


     storageDir.mkdir(); 
     try { 

      if(outfile == null){ 
      outfile=File.createTempFile("rr3LogFile", ".txt",storageDir); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 





public static void logToSdcard(String tag, String statement){ 


     Log.e(TAG, "inside logtosdcard$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); 


       String state = android.os.Environment.getExternalStorageState(); 
       if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
        try { 
         throw new IOException("SD Card is not mounted. It is " + state + "."); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

       DateTime now = new DateTime(); 
       DateTimeFormatter fmt = DateTimeFormat.forPattern("d-MMM-Y H:mm"); 
       String dateStr = fmt.print(now); 


       try{ 


        FileOutputStream fOut = new FileOutputStream(outfile); 
        OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut); 
        myOutWriter.append(dateStr + " " + tag + "  "); 
        myOutWriter.append(statement); 
        myOutWriter.append("\n"); 
        myOutWriter.flush(); 
        myOutWriter.close(); 
        fOut.close(); 

       }catch(IOException e){ 
        e.printStackTrace(); 
       } 




    } 


} 

.

그런 다음 앱의 어느 곳에서나 활동합니다. 당신의 logToSdcard 방법에

@Override 
    protected void onResume() { 
     super.onResume(); 
     Log.e(TAG, "inside entryactivity onResume"); 
     NfcScannerApplication.logToSdcard(TAG, "inside entryactivity onResume"); 
+0

'logcat '을 사용하여 로그를 쓸 수 있습니다. 이 답변보기 : http://stackoverflow.com/a/17609646/2198638. – Brtle

+0

당신이하는 방식대로 앱을 호출 할 때마다 하나의 파일이 있으므로 createTempFile()을 사용하지 마십시오. 그런 다음 파일에 추가해야하는 [this FileOutputStream constructor] (http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream%28java.io.File, % 20 부울 % 29). – devconsole

+0

@AddrallynWigolath 안녕하세요, 로그 파일을 만듭니다. 그러나 파일 관리자를 통해 파일을 탐색하고 클릭하면 '응용 프로그램을 사용할 수 없음'이라고 표시됩니다. 어떤 아이디어? 감사합니다 – turtleboy

답변

3

그 시도를 참조하십시오 : 응용 프로그램이 종료 될 때까지

public static void printLog(Context context){ 
    String filename = context.getExternalFilesDir(null).getPath() + File.separator + "my_app.log"; 
    String command = "logcat -f "+ filename + " -v time -d *:V"; 

    Log.d(TAG, "command: " + command); 

    try{ 
     Runtime.getRuntime().exec(command); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

로그를 지속적으로 저장됩니다.

+0

안녕하세요 고맙습니다. I.ve는 당신이 앱에 들어가서 뭔가를 한 다음 파일을보기도하지만 때로는 그 파일을 보지 못하게하지만 나중에 파일을 보면 그 파일을 쓴 것으로 보입니다. 저것과는 별개로 화려한. 도와 주셔서 정말로 고맙습니다. 매트 – turtleboy

+0

여러분을 환영합니다! – Brtle

+0

실제로 마지막 질문이 하나 있습니다. 나는 나의 lauching 활동에서 다음과 같은 것을 가지고있다. NfcScannerApplication.logToSdcard (this); 당신이 기록한 모든 활동에서 나에게 부여한이 메소드를 호출해야합니까? 아니면 메소드가 애플리케이션 객체에 있기 때문에 전체 애플리케이션이 기록 될까요? – turtleboy

5

는 추가 매개 변수와 함께 FileOutputStream에를 만듭니다

FileOutputStream fOut = new FileOutputStream(outfile, true); 

true paramters는 내용이 파일에 추가 될 것이라고 말했다. 또한 FileOutputStream

+0

그것은 여전히 ​​여러 개의 로그 파일을 생성하고 있지만, 현재는 여러 개의 로그 문이 있습니다. 여러 파일을 만드는 이유는 무엇입니까? – turtleboy