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
}
}
|
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();
}
|