Java/JSP/Customized Tag
Версия от 18:01, 31 мая 2010; (обсуждение)
Logger for tag
/*
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>cbck</short-name>
<description>Cookbook custom tags</description>
<uri>com.jexp.tags</uri>
<tag>
<name>log</name>
<tag-class>com.jexp.LoggerTag</tag-class>
<body-content>JSP</body-content>
<description>This tag uses log4j to log a message.</description>
<attribute>
<name>configFile</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<description>This attribute provides any configuration file name for the logger. The file must be located in WEB-INF/classes</description>
</attribute>
<attribute>
<name>level</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<description>This attribute provides the level for the log request.</description>
</attribute>
</tag>
</taglib>
*/
//Log4j from Apache is required
package com.jexp;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import java.lang.reflect.Method;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class LoggerTag extends BodyTagSupport {
private Logger log = null;
private String configFile = null;
private String level = null;
private final static String[] LEVELS = { "debug", "info", "warn", "error",
"fatal" };
public void setConfigFile(String fileName) {
this.configFile = fileName;
}
public void setLevel(String level) {
this.level = level;
}
public int doEndTag() throws JspException {
if (configFile != null)
PropertyConfigurator.configure(pageContext.getServletContext()
.getRealPath("/")
+ "WEB-INF/classes/" + configFile);
level = level.toLowerCase();
if (!contains(level))
throw new JspException(
"The value given for the level attribute is invalid.");
log = Logger.getLogger(LoggerTag.class);
String message = getBodyContent().getString().trim();
Method method = null;
try {
method = log.getClass().getMethod(level,
new Class[] { Object.class });
method.invoke(log, new String[] { message });
} catch (Exception e) {
}
return EVAL_PAGE;
}
public void release() {
log = null;
configFile = null;
level = null;
}
private boolean contains(String str) {
for (int i = 0; i < LEVELS.length; i++) {
if (LEVELS[i].equals(str))
return true;
}
return false;
}
}