import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;html
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;java
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;apache
public class LoggingV2 extends HttpServlet{app
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(LoggingV2.class);
private static final LoggerContext LOGGER_CONTEXT = (LoggerContext) LogManager.getContext(LoggingV2.class.getClassLoader() , false);ui
StringBuilder sBuilder = new StringBuilder();
public String REQ_PARAM_ACTION = "action";
public String REQ_PARAM_CATEGORY = "cat";
public String REQ_PARAM_PRIORITY = "priority";
public String REQ_ACTION_EDIT = "edit";
public String REQ_ACTION_LIST = "list";
public String REQ_ACTION_SET = "set";
public void doGet(HttpServletRequest request , HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
StringBuilder stringBuilder = new StringBuilder(200);
renderHead(stringBuilder);
String action = request.getParameter(REQ_PARAM_ACTION);
if (action == null)
action = "";
action = action.trim().toLowerCase();
stringBuilder.append("<!-- REQ_ACTION: " + REQ_ACTION_SET + " -->");
stringBuilder.append("<!-- ACTION: " + action + " -->");
String REQ_PARAM_CATEGORY_VAL = request.getParameter(REQ_PARAM_CATEGORY);
String REQ_PARAM_PRIORITY_VAL = request.getParameter(REQ_PARAM_PRIORITY);
stringBuilder.append("<!-- CATEGORY: " + REQ_PARAM_CATEGORY_VAL + " -->");
stringBuilder.append("<!-- PRIORITY: " + REQ_PARAM_PRIORITY_VAL + " -->");
if (action.equals(REQ_ACTION_SET)) {
setPriority(request, stringBuilder);
renderCategoryList(request, stringBuilder);
} else if (action.equals(REQ_ACTION_EDIT)) {
renderEditForm(request, stringBuilder);
} else {
renderCategoryList(request, stringBuilder);
}
renderFoot(stringBuilder);
writer.write(stringBuilder.toString());
}this
public String simpleEncode(String string) {
if (string == null)
return null;
int len = string.length();
if (len == 0)
return string;spa
StringBuilder buf = new StringBuilder((int) (len * 1.25f));
for (int i = 0; i < len; ++i) {
char c = string.charAt(i);
switch (c) {
case '<':
buf.append("<");
break;
case '>':
buf.append(">");
break;
case '&':
buf.append("&");
break;
case '"':
buf.append(""");
break;
default:
buf.append(c);
break;
}
}
return buf.toString();
}.net
public boolean isBlank(String s) {
if (s == null)
return true;
if (s.trim().equals(""))
return true;
return false;
}code
public void setPriority(HttpServletRequest r, StringBuilder builder) {
String scat = r.getParameter(REQ_PARAM_CATEGORY);
String spri = r.getParameter(REQ_PARAM_PRIORITY);
if (scat != null)
scat = scat.trim();orm
Logger log = null;
Level pri = null;
if (!isBlank(spri)) {
pri = Level.toLevel(spri, null);
}
builder.append("<!-- pri=" + pri + " -->");
if (!isBlank(scat) && !scat.equals("root")) {
Configurator.setLevel(scat, pri);
logger.info(String.format("Setting '%s' to level [%s]", scat, pri));
} else {
if (pri != null) {
Configurator.setRootLevel(pri);
logger.info(String.format("Setting '%s' to level [%s]", scat, pri));
}
}
}
public void renderCategoryList(HttpServletRequest r, StringBuilder stringBuilder) {
String scriptName = getScriptName(r);
stringBuilder.append("<form method=get action=\"");
stringBuilder.append(scriptName);
stringBuilder.append("\"><table cellspacing=0 cellpadding=1>");
stringBuilder.append("<tr><td><b>Logger</b></td><td><b>Level</b></td></tr>");
stringBuilder.append("<tr><td><hr noshade size=1></td><td><hr noshade size=1></td></tr>");
stringBuilder.append("");
printCategory(getRootLogger(), scriptName, stringBuilder);
Collection<org.apache.logging.log4j.core.Logger> loggers = LOGGER_CONTEXT.getLoggers();
Set<String> a = new HashSet<>();
for(org.apache.logging.log4j.core.Logger log : loggers) {
if(log != getRootLogger())
a.add(log.getName());
}
ArrayList<String> list = new ArrayList<>(a.size());
list.addAll(a);
Collections.sort(list);
for (String logName : list) {
printCategory(LOGGER_CONTEXT.getLogger(logName), scriptName, stringBuilder);
}
stringBuilder.append("<tr><td><hr noshade size=1></td><td><hr noshade size=1></td></tr>");
stringBuilder.append("</table>");
stringBuilder.append("<input type=submit name=action value=\"Reload\">");
stringBuilder.append("<input type=submit name=action value=\" Edit \"></form>");
}
/**
* Render a single category row within a category list.
*/
public void printCategory(org.apache.logging.log4j.core.Logger log, String scriptName, StringBuilder builder) {
boolean isInherited = log.getLevel() == null;
String catName = (log == LogManager.getRootLogger() ? "root" : log.getName());
builder.append("<tr><td><b><tt><a href=\"");
builder.append(scriptName);
builder.append("?action=");
builder.append(REQ_ACTION_EDIT);
builder.append("&cat=");
try {
builder.append(URLEncoder.encode(catName, "UTF-8"));
} catch (java.io.UnsupportedEncodingException uee) {
// should not get here
}
builder.append("\">");
builder.append(simpleEncode(catName));
builder.append("</a>");
builder.append("</tt></b></td><td>");
if (isInherited) {
builder.append("<i>");
} else {
builder.append("<b>");
}
builder.append(log.getLevel().name());
if (isInherited) {
builder.append("<i>");
} else {
builder.append("<b>");
}
builder.append("</td></tr>");
}
/**
* Render category edit form.
*/
public void renderEditForm(HttpServletRequest r, StringBuilder builder){
String scriptName = getScriptName(r);
builder.append("<form method=get action=\"");
builder.append(scriptName);
builder.append("\">");
org.apache.logging.log4j.core.Logger log = getCategory(r.getParameter(REQ_PARAM_CATEGORY));
Level pri = log.getLevel();
String spri = null;
if (pri == null) {
pri = LOGGER_CONTEXT.getLogger(this.getClass().getName()).getLevel();
spri = "";
} else {
spri = pri.toString();
}
builder.append("<table border=0>");
builder.append("<tr valign=top>");
builder.append("<td align=right><b>Category:</b></td>");
builder.append("<td align=left>");
builder.append("<input type=text size=50 name=cat value=\"");
if(log == getRootLogger()) {
builder.append(simpleEncode("root"));
}else {
builder.append(simpleEncode(log.getName()));
}
builder.append("\"></td></tr>");
builder.append("<tr valign=top>");
builder.append("<td align=right><b>Level:</b></td>");
builder.append("<td align=left><select name=priority>");
printPriorityOption(builder, "OFF", "OFF", spri);
printPriorityOption(builder, "FATAL", "FATAL", spri);
printPriorityOption(builder, "ERROR", "ERROR", spri);
printPriorityOption(builder, "WARN", "WARN", spri);
printPriorityOption(builder, "INFO", "INFO", spri);
printPriorityOption(builder, "DEBUG", "DEBUG", spri);
printPriorityOption(builder, "TRACE", "TRACE", spri);
printPriorityOption(builder, "ALL", "ALL", spri);
builder.append("</select></td></tr>");
builder.append("</table>");
builder.append("<input type=submit name=action value=\" Set \">");
builder.append("<input type=submit name=action value=\"Cancel\">");
builder.append("</form>");
}
public void printPriorityOption(StringBuilder builder, String label, String value, String curValue) {
builder.append("<option value=\"");
builder.append(value);
builder.append("\"");
if (curValue != null && curValue.equals(value)) {
builder.append(" selected");
}
builder.append(">");
builder.append(label);
builder.append("</option>");
}
public void renderHead(StringBuilder builder) {
builder.append("<html><body>");
}
public void renderFoot(StringBuilder builder) { builder.append("</body></html>