FileDocCategorySizeDatePackage
Log4jRequestHandler.javaAPI DocApache log4j 1.2.156576Sat Aug 25 00:09:34 BST 2007com.psibt.framework.net

Log4jRequestHandler

public class Log4jRequestHandler extends RootRequestHandler
This class implements a RequestHandler for log4j configuration. It serves the "/log4j/" path in the PluggableHTTPServer. If this path is requested a list of all current log4j categories with their current priorities is created. All priority settings can be changed by the user and can be submitted and taken over.
author
Volker Mentzner

Fields Summary
private Priority[]
prios
Constructors Summary
public Log4jRequestHandler()
Creates a new Log4jRequestHandler object


         
    
    this.setTitle("log4j");
    this.setDescription("log4j configuration");
    this.setHandledPath("/log4j/");
  
Methods Summary
public booleanhandleRequest(java.lang.String request, java.io.Writer out)
Handles the given request and writes the reply to the given out-stream.

param
request - client browser request
param
out - Out stream for sending data to client browser
return
if the request was handled by this handler : true, else : false

    String path = "";
    String query = null;
    String name;
    try {
      // check request url
      URL url = new URL("http://localhost"+request);
      path = url.getPath();
      query = url.getQuery();
      if (path.startsWith(this.getHandledPath()) == false) {
        return false;
      }

      out.write("HTTP/1.0 200 OK\r\n");
      out.write("Content-type: text/html\r\n\r\n");
      out.write("<HTML><HEAD><TITLE>" + this.getTitle() + "</TITLE></HEAD>\r\n");
      out.write("<BODY><H1>log4j</H1>\r\n");
      out.write(this.getDescription() + "<br><br>\r\n");

      // handle a request with query
      if ((query != null) && (query.length() >= 0)) {
        StringTokenizer st = new StringTokenizer(query, "&");
        String cmd;
        String catname;
        String catval;
        int idx;
        while (st.hasMoreTokens()) {
          cmd = st.nextToken();
          idx = cmd.indexOf("=");
          catname = cmd.substring(0, idx);
          catval = cmd.substring(idx+1, cmd.length());
          if (catname.equalsIgnoreCase("root"))
            Category.getRoot().setPriority(Priority.toPriority(catval));
          else
            Category.getInstance(catname).setPriority(Priority.toPriority(catval));
        }
      }

      // output category information in a form with a simple table
      out.write("<form name=\"Formular\" ACTION=\""+this.getHandledPath()+"\" METHOD=\"PUT\">");
      out.write("<table cellpadding=4>\r\n");
      out.write(" <tr>\r\n");
      out.write("  <td><b>Category</b></td>\r\n");
      out.write("  <td><b>Priority</b></td>\r\n");
      out.write("  <td><b>Appender</b></td>\r\n");
      out.write(" </tr>\r\n");

      // output for root category
      Category cat = Category.getRoot();
      out.write(" <tr><td>root</td>\r\n");
      out.write("  <td>\r\n");
      out.write("   <select size=1 name=\""+ cat.getName() +"\">");
      for (int i = 0; i < prios.length; i++) {
        if (cat.getChainedPriority().toString().equals(prios[i].toString()))
          out.write("<option selected>"+prios[i].toString());
        else
          out.write("<option>"+prios[i].toString());
      }
      out.write("</select>\r\n");
      out.write("  </td>\r\n");
      out.write("  <td>\r\n");
      for (Enumeration apds = cat.getAllAppenders(); apds.hasMoreElements();) {
        Appender apd = (Appender)apds.nextElement();
        name = apd.getName();
        if (name == null)
          name = "<i>(no name)</i>";
        out.write(name);
        if (apd instanceof AppenderSkeleton) {
          try {
            AppenderSkeleton apskel = (AppenderSkeleton)apd;
            out.write(" [" + apskel.getThreshold().toString() + "]");
          } catch (Exception ex) {
          }
        }
        if (apds.hasMoreElements())
          out.write(",  ");
      }
      out.write("  </td>\r\n");
      out.write(" </tr>\r\n");

      // output for all other categories
      for (Enumeration en = Category.getCurrentCategories(); en.hasMoreElements();) {
        cat = (Category)en.nextElement();
        out.write(" <tr>\r\n");
        out.write("  <td>" + cat.getName() + "</td>\r\n");
        out.write("  <td>\r\n");
        out.write("   <select size=1 name=\""+ cat.getName() +"\">");
        for (int i = 0; i < prios.length; i++) {
          if (cat.getChainedPriority().toString().equals(prios[i].toString()))
            out.write("<option selected>"+prios[i].toString());
          else
            out.write("<option>"+prios[i].toString());
        }
        out.write("</select>\r\n");
        out.write("  </td>\r\n");
        out.write("  <td>\r\n");
        for (Enumeration apds = cat.getAllAppenders(); apds.hasMoreElements();) {
          Appender apd = (Appender)apds.nextElement();
          name = apd.getName();
          if (name == null)
            name = "<i>(no name)</i>";
          out.write(name);
          if (apd instanceof AppenderSkeleton) {
            try {
              AppenderSkeleton apskel = (AppenderSkeleton)apd;
              out.write(" [" + apskel.getThreshold().toString() + "]");
            } catch (Exception ex) {
            }
          }
          if (apds.hasMoreElements())
            out.write(",  ");
        }
        out.write("  </td>\r\n");
        out.write(" </tr>\r\n");
      }
      out.write("</table>\r\n");
      out.write("<input type=submit value=\"Submit\">");
      out.write("</form>");
      out.write("</BODY></HTML>\r\n");
      out.flush();
      return true;
    } catch (Exception ex) {
      return false;
    }