org.rhq.plugins.apache.ApacheErrorLogEntryProcessor Maven / Gradle / Ivy
/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.plugins.apache;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Date;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.File;
import org.rhq.core.pluginapi.event.log.MultiLineLogEntryProcessor;
import org.rhq.core.domain.event.EventSeverity;
/**
* A {@link org.rhq.core.pluginapi.event.log.LogEntryProcessor} for Apache HTTPd error log files.
*
* @author Ian Springer
*/
public class ApacheErrorLogEntryProcessor extends MultiLineLogEntryProcessor {
/**
* The regex for the primary log line: '['date']' '['severityLevel']' '['clientIP']' message
* e.g.: [Wed Oct 11 14:32:52 2008] [error] [client 127.0.0.1] client denied by server configuration
* NOTE: The message portion may contain multiple lines.
*/
private static final String REGEX = "\\[(.*)\\] \\[(debug|info|notice|warn|error|crit|alert|emerg)\\] (.*)";
private static final Pattern PATTERN = Pattern.compile(REGEX);
private static final String DATE_PATTERN = "EEE MMM dd kk:mm:ss yyyy"; // e.g.: Tue Mar 04 14:32:52 2008
private static final DateFormat DATE_FORMAT = new SimpleDateFormat(DATE_PATTERN);
private static final Map LEVEL_TO_SEVERITY_MAP = new LinkedHashMap();
static {
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.DEBUG, EventSeverity.DEBUG);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.INFO, EventSeverity.INFO);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.NOTICE, EventSeverity.INFO);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.WARN, EventSeverity.WARN);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.ERROR, EventSeverity.ERROR);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.CRIT, EventSeverity.FATAL);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.ALERT, EventSeverity.FATAL);
LEVEL_TO_SEVERITY_MAP.put(SeverityLevel.EMERG, EventSeverity.FATAL);
}
public ApacheErrorLogEntryProcessor(String eventType, File logFile) {
super(eventType, logFile);
}
protected Pattern getPattern() {
return PATTERN;
}
protected DateFormat getDefaultDateFormat() {
return DATE_FORMAT;
}
protected LogEntry processPrimaryLine(Matcher matcher) throws ParseException {
String dateString = matcher.group(1);
Date timestamp = parseDateString(dateString);
String severityLevelString = matcher.group(2);
SeverityLevel severityLevel;
try {
severityLevel = SeverityLevel.valueOf(severityLevelString.toUpperCase());
}
catch (IllegalArgumentException e) {
throw new ParseException("Unknown severity level: " + severityLevelString);
}
EventSeverity severity = LEVEL_TO_SEVERITY_MAP.get(severityLevel);
String detail = matcher.group(3);
return new LogEntry(timestamp, severity, detail);
}
private enum SeverityLevel {
DEBUG,
INFO,
NOTICE,
WARN,
ERROR,
CRIT,
ALERT,
EMERG
}
}