LogCollThread.java
3.26 KB
1
2
3
4
5
6
7
8
9
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
package com.sitech.ismp.coll.busi;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import org.apache.log4j.Logger;
import com.sitech.ismp.coll.CollBase;
import com.sitech.util.Formater;
import com.sitech.util.SysHelper;
/**
* ClassName:LogCollThread
* Description: 日志采集
*
* @author Linxc
* @version
* @since Ver 1.1
* @Date 2012 Feb 23, 2012 10:33:39 AM
*/
public class LogCollThread extends Thread{
private static Logger logger = Logger.getLogger("BUSI_COLL");
/** 日志扫描间隔 */
private static final long SCAN_INTERVAL = 2 * 1000L;
/** 日志文件所在主机IP地址 */
private String ipAddr;
/** 日志文件绝对路径 */
private String absolutePath;
private String preUnitId;
private String[] key;
/** 采集周期 */
private String interval = "2000";
private boolean runFlag = true;
public LogCollThread(HashMap<String, String> params) {
ipAddr = params.get("LOGINIP");
absolutePath = params.get("LOGNAME");
String kbpClass = params.get("KBPCLASS");
preUnitId = kbpClass + ":" + Formater.neatenunitid(ipAddr) + "-" + Formater.neatenunitid(absolutePath);
String keyWords = params.get("KEYWORD");
logger.info(keyWords);
key = keyWords.split(",");
runFlag = true;
}
public void run() {
logger.info("Begin collLog...");
CollBase collBase = new CollBase();
File logFile = new File(absolutePath);
if (logFile == null || !logFile.exists()) {
logger.error("Can't find log file: " + absolutePath);
return;
}
for (int i = 0; i < key.length; i++) {
String unitId = preUnitId + "-" + Formater.neatenunitid(key[i]);
// 日志文件名称
collBase.addKPI(unitId, "CM-01-14-013-01", absolutePath, interval);
collBase.addKPI(unitId, "CM-01-14-013-02", ipAddr, interval);
collBase.addKPI(unitId, "CM-01-14-013-03", key[i], interval);
collBase.addKPI(unitId, "FM-01-14-013-01", "OK", interval);
}
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(logFile)));
} catch (Exception e) {
logger.error("Exception while collLog.", e);
return;
}
if(br == null){
logger.error("br == null");
return;
}
while (runFlag) {
try {
String line = br.readLine();
if (line == null) {
SysHelper.waitIt(this, SCAN_INTERVAL);
continue;
}
for (String keyWord : key) {
if (isMatchExpression(line, keyWord)) {
String unitId = preUnitId + "-" + Formater.neatenunitid(keyWord);
collBase.addKPI(unitId, "FM-01-14-013-01", line, interval);
break;
}
}// end for
collBase.saveKPI2File();
} catch (Exception e) {
e.printStackTrace();
logger.error("Exception while collLog", e);
SysHelper.waitIt(this, 1000L);
}
}// end while
}
/**
* 是否存在关键字
*
* @param line
* 字符串内容
* @param expression
* 关键字
* @return
*/
public boolean isMatchExpression(String line, String keyWord) {
if (line.indexOf(keyWord) >= 0) {
return true;
} else {
return false;
}
}
public boolean isRunFlag() {
return runFlag;
}
public void setRunFlag(boolean runFlag) {
this.runFlag = runFlag;
}
}