log信息

 相信你們在作應用調試的時候,不可能時時經過USB線連着電腦去查看log信息,因此,將應用的log信息保存到手機本地就頗有必要了,有助咱們從這些log信息中提取有用的部分,以解決一些bug,下面我把網上分享的代碼中做了一些精簡,做爲開發者使用,我的以爲不必經過用戶上傳給咱們,用戶上傳的不須要這麼龐大的log信息,僅僅那部分崩潰的log信息便可,可參考個人另一篇blog:http://www.eoeandroid.com/thread-247560-1-1.html 好了,廢話很少說,直接分享封裝好的log信息類:LogcatHelper

?
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package com.way.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.content.Context;
import android.os.Environment;
/**
* log日誌統計保存
*
* @author way
*
*/
public class LogcatHelper {
private static LogcatHelper INSTANCE = null ;
private static String PATH_LOGCAT;
private LogDumper mLogDumper = null ;
private int mPId;
/**
*
* 初始化目錄
*
* */
public void init(Context context) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) { // 優先保存到SD卡中
PATH_LOGCAT = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + "miniGPS" ;
} else { // 若是SD卡不存在,就保存到本應用的目錄下
PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
+ File.separator + "miniGPS" ;
}
File file = new File(PATH_LOGCAT);
if (!file.exists()) {
file.mkdirs();
}
}
public static LogcatHelper getInstance(Context context) {
if (INSTANCE == null ) {
INSTANCE = new LogcatHelper(context);
}
return INSTANCE;
}
private LogcatHelper(Context context) {
init(context);
mPId = android.os.Process.myPid();
}
public void start() {
if (mLogDumper == null )
mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);
mLogDumper.start();
}
public void stop() {
if (mLogDumper != null ) {
mLogDumper.stopLogs();
mLogDumper = null ;
}
}
private class LogDumper extends Thread {
private Process logcatProc;
private BufferedReader mReader = null ;
private boolean mRunning = true ;
String cmds = null ;
private String mPID;
private FileOutputStream out = null ;
public LogDumper(String pid, String dir) {
mPID = pid;
try {
out = new FileOutputStream( new File(dir, "GPS-"
+ MyDate.getFileName() + ".log" ));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
*
* 日誌等級:*:v , *:d , *:w , *:e , *:f , *:s
*
* 顯示當前mPID程序的 E和W等級的日誌.
*
* */
// cmds = "logcat *:e *:w | grep \"(" + mPID + ")\"";
// cmds = "logcat | grep \"(" + mPID + ")\"";//打印全部日誌信息
// cmds = "logcat -s way";//打印標籤過濾信息
cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"" ;
}
public void stopLogs() {
mRunning = false ;
}
@Override
public void run() {
try {
logcatProc = Runtime.getRuntime().exec(cmds);
mReader = new BufferedReader( new InputStreamReader(
logcatProc.getInputStream()), 1024 );
String line = null ;
while (mRunning && (line = mReader.readLine()) != null ) {
if (!mRunning) {
break ;
}
if (line.length() == 0 ) {
continue ;
}
if (out != null && line.contains(mPID)) {
out.write((MyDate.getDateEN() + " " + line + "\n" )
.getBytes());
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (logcatProc != null ) {
logcatProc.destroy();
logcatProc = null ;
}
if (mReader != null ) {
try {
mReader.close();
mReader = null ;
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null ) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
out = null ;
}
}
}
}
}


記得加上權限:

?
代碼片斷,雙擊複製
01
02
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name= "android.permission.READ_LOGS" />



另外把那個時間的工具類也分享一下:
?
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
package com.way.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyDate {
public static String getFileName() {
SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" );
String date = format.format( new Date(System.currentTimeMillis()));
return date; // 2012年10月03日 23:41:31
}
public static String getDateEN() {
SimpleDateFormat format1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
String date1 = format1.format( new Date(System.currentTimeMillis()));
return date1; // 2012-10-03 23:41:31
}
}


OK,全部事情作完以後,在咱們的應用中start一下就OK了,使用完以後,記得調用一下stop:
?
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
public class GPSApplication extends Application {
@Override
public void onCreate() {
// TODO Auto-generated method stub
LogcatHelper.getInstance( this ).start();
}  
相關文章
相關標籤/搜索