LogLevel.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.log;
  19. import java.io.*;
  20. import java.net.*;
  21. import java.util.regex.Pattern;
  22. import javax.servlet.*;
  23. import javax.servlet.http.*;
  24. import org.apache.commons.logging.*;
  25. import org.apache.commons.logging.impl.*;
  26. import org.apache.hadoop.util.ServletUtil;
  27. /**
  28.  * Change log level in runtime.
  29.  */
  30. public class LogLevel {
  31.   public static final String USAGES = "nUSAGES:n"
  32.     + "java " + LogLevel.class.getName()
  33.     + " -getlevel <host:port> <name>n"
  34.     + "java " + LogLevel.class.getName()
  35.     + " -setlevel <host:port> <name> <level>n";
  36.   /**
  37.    * A command line implementation
  38.    */
  39.   public static void main(String[] args) {
  40.     if (args.length == 3 && "-getlevel".equals(args[0])) {
  41.       process("http://" + args[1] + "/logLevel?log=" + args[2]);
  42.       return;
  43.     }
  44.     else if (args.length == 4 && "-setlevel".equals(args[0])) {
  45.       process("http://" + args[1] + "/logLevel?log=" + args[2]
  46.               + "&level=" + args[3]);
  47.       return;
  48.     }
  49.     System.err.println(USAGES);
  50.     System.exit(-1);
  51.   }
  52.   private static void process(String urlstring) {
  53.     try {
  54.       URL url = new URL(urlstring);
  55.       System.out.println("Connecting to " + url);
  56.       URLConnection connection = url.openConnection();
  57.       connection.connect();
  58.       BufferedReader in = new BufferedReader(new InputStreamReader(
  59.           connection.getInputStream()));
  60.       for(String line; (line = in.readLine()) != null; )
  61.         if (line.startsWith(MARKER)) {
  62.           System.out.println(TAG.matcher(line).replaceAll(""));
  63.         }
  64.       in.close();
  65.     } catch (IOException ioe) {
  66.       System.err.println("" + ioe);
  67.     }
  68.   }
  69.   static final String MARKER = "<!-- OUTPUT -->";
  70.   static final Pattern TAG = Pattern.compile("<[^>]*>");
  71.   /**
  72.    * A servlet implementation
  73.    */
  74.   public static class Servlet extends HttpServlet {
  75.     private static final long serialVersionUID = 1L;
  76.     public void doGet(HttpServletRequest request, HttpServletResponse response
  77.         ) throws ServletException, IOException {
  78.       PrintWriter out = ServletUtil.initHTML(response, "Log Level");
  79.       String logName = ServletUtil.getParameter(request, "log");
  80.       String level = ServletUtil.getParameter(request, "level");
  81.       if (logName != null) {
  82.         out.println("<br /><hr /><h3>Results</h3>");
  83.         out.println(MARKER
  84.             + "Submitted Log Name: <b>" + logName + "</b><br />");
  85.         Log log = LogFactory.getLog(logName);
  86.         out.println(MARKER
  87.             + "Log Class: <b>" + log.getClass().getName() +"</b><br />");
  88.         if (level != null) {
  89.           out.println(MARKER + "Submitted Level: <b>" + level + "</b><br />");
  90.         }
  91.         if (log instanceof Log4JLogger) {
  92.           process(((Log4JLogger)log).getLogger(), level, out);
  93.         }
  94.         else if (log instanceof Jdk14Logger) {
  95.           process(((Jdk14Logger)log).getLogger(), level, out);
  96.         }
  97.         else {
  98.           out.println("Sorry, " + log.getClass() + " not supported.<br />");
  99.         }
  100.       }
  101.       out.println(FORMS);
  102.       out.println(ServletUtil.HTML_TAIL);
  103.     }
  104.     static final String FORMS = "n<br /><hr /><h3>Get / Set</h3>"
  105.         + "n<form>Log: <input type='text' size='50' name='log' /> "
  106.         + "<input type='submit' value='Get Log Level' />"
  107.         + "</form>"
  108.         + "n<form>Log: <input type='text' size='50' name='log' /> "
  109.         + "Level: <input type='text' name='level' /> "
  110.         + "<input type='submit' value='Set Log Level' />"
  111.         + "</form>";
  112.     private static void process(org.apache.log4j.Logger log, String level,
  113.         PrintWriter out) throws IOException {
  114.       if (level != null) {
  115.         log.setLevel(org.apache.log4j.Level.toLevel(level));
  116.         out.println(MARKER + "Setting Level to " + level + " ...<br />");
  117.       }
  118.       out.println(MARKER
  119.           + "Effective level: <b>" + log.getEffectiveLevel() + "</b><br />");
  120.     }
  121.     private static void process(java.util.logging.Logger log, String level,
  122.         PrintWriter out) throws IOException {
  123.       if (level != null) {
  124.         log.setLevel(java.util.logging.Level.parse(level));
  125.         out.println(MARKER + "Setting Level to " + level + " ...<br />");
  126.       }
  127.       java.util.logging.Level lev;
  128.       for(; (lev = log.getLevel()) == null; log = log.getParent());
  129.       out.println(MARKER + "Effective level: <b>" + lev + "</b><br />");
  130.     }
  131.   }
  132. }