SystemLogParser.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.contrib.failmon;
- import java.io.IOException;
- import java.util.Calendar;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**********************************************************
- * An object of this class parses a Unix system log file to create
- * appropriate EventRecords. Currently, only the syslogd logging
- * daemon is supported.
- *
- **********************************************************/
- public class SystemLogParser extends LogParser {
- static String[] months = { "January", "February", "March", "April", "May",
- "June", "July", "August", "September", "October", "November", "December" };
- /**
- * Create a new parser object .
- */
- public SystemLogParser(String fname) {
- super(fname);
- if ((dateformat = Environment.getProperty("log.system.dateformat")) == null)
- dateformat = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d+)";
- if ((timeformat = Environment.getProperty("log.system.timeformat")) == null)
- timeformat = "\d{2}:\d{2}:\d{2}";
- }
- /**
- * Parses one line of the log. If the line contains a valid
- * log entry, then an appropriate EventRecord is returned, after all
- * relevant fields have been parsed.
- *
- * @param line the log line to be parsed
- *
- * @return the EventRecord representing the log entry of the line. If
- * the line does not contain a valid log entry, then the EventRecord
- * returned has isValid() = false. When the end-of-file has been reached,
- * null is returned to the caller.
- */
- public EventRecord parseLine(String line) throws IOException {
- EventRecord retval = null;
- if (line != null) {
- // process line
- String patternStr = "(" + dateformat + ")";
- patternStr += "\s+";
- patternStr += "(" + timeformat + ")";
- patternStr += "\s+(\S*)\s"; // for hostname
- // patternStr += "\s*([\w+\.?]+)"; // for source
- patternStr += ":?\s*(.+)"; // for the message
- Pattern pattern = Pattern.compile(patternStr);
- Matcher matcher = pattern.matcher(line);
- if (matcher.find() && matcher.groupCount() >= 0) {
- retval = new EventRecord(hostname, ips, parseDate(matcher.group(1),
- matcher.group(4)), "SystemLog", "Unknown", // loglevel
- "Unknown", // source
- matcher.group(6)); // message
- } else {
- retval = new EventRecord();
- }
- }
- return retval;
- }
- /**
- * Parse a date found in the system log.
- *
- * @return a Calendar representing the date
- */
- protected Calendar parseDate(String strDate, String strTime) {
- Calendar retval = Calendar.getInstance();
- // set date
- String[] fields = strDate.split("\s+");
- retval.set(Calendar.MONTH, parseMonth(fields[0]));
- retval.set(Calendar.DATE, Integer.parseInt(fields[1]));
- // set time
- fields = strTime.split(":");
- retval.set(Calendar.HOUR_OF_DAY, Integer.parseInt(fields[0]));
- retval.set(Calendar.MINUTE, Integer.parseInt(fields[1]));
- retval.set(Calendar.SECOND, Integer.parseInt(fields[2]));
- return retval;
- }
- /**
- * Convert the name of a month to the corresponding int value.
- *
- * @return the int representation of the month.
- */
- private int parseMonth(String month) {
- for (int i = 0; i < months.length; i++)
- if (months[i].startsWith(month))
- return i;
- return -1;
- }
-
- /**
- * Return a String with information about this class
- *
- * @return A String describing this class
- */
- public String getInfo() {
- return ("System Log Parser for file : " + file.getAbsoluteFile());
- }
- }