@Override protected org.apache.log4j.Logger getLog4jLogger(Logger logger) { Log4jLoggerAdapter adapter = (Log4jLoggerAdapter) logger.getDelegate(); try { return (org.apache.log4j.Logger) log4jField.get(adapter); } catch (Exception e) { throw new TddlNestableRuntimeException(e); } }
/** * Switches the logger for the given class to DEBUG level. * * @param clazz The class for which to switch to debug logging. */ public void enableDebug(Class<?> clazz) { Logger l = LoggerFactory.getLogger(clazz); if (l instanceof Log4JLogger) { ((Log4JLogger) l).getLogger().setLevel(org.apache.log4j.Level.DEBUG); } else if (l instanceof Log4jLoggerAdapter) { LogManager.getLogger(clazz).setLevel(org.apache.log4j.Level.DEBUG); } else if (l instanceof Jdk14Logger) { ((Jdk14Logger) l).getLogger().setLevel(java.util.logging.Level.ALL); } }
@Override public void doGet(HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { // Do the authorization if (!HttpServer.hasAdministratorAccess(getServletContext(), request, response)) { return; } PrintWriter out = ServletUtil.initHTML(response, "Log Level"); String logName = ServletUtil.getParameter(request, "log"); String level = ServletUtil.getParameter(request, "level"); if (logName != null) { out.println("<br /><hr /><h3>Results</h3>"); out.println(MARKER + "Submitted Log Name: <b>" + logName + "</b><br />"); Logger log = LoggerFactory.getLogger(logName); out.println(MARKER + "Log Class: <b>" + log.getClass().getName() +"</b><br />"); if (level != null) { out.println(MARKER + "Submitted Level: <b>" + level + "</b><br />"); } if (log instanceof Log4JLogger) { process(((Log4JLogger)log).getLogger(), level, out); } else if (log instanceof Jdk14Logger) { process(((Jdk14Logger)log).getLogger(), level, out); } else if (log instanceof Log4jLoggerAdapter) { process(LogManager.getLogger(logName), level, out); } else { out.println("Sorry, " + log.getClass() + " not supported.<br />"); } } out.println(FORMS); out.println(ServletUtil.HTML_TAIL); }
private static org.apache.log4j.Logger getLog4jLogger(String loggerName) { Logger logger = LoggerFactory.getLogger(loggerName); if (logger instanceof Log4JLogger) { Log4JLogger httpLog4JLog = (Log4JLogger)logger; return httpLog4JLog.getLogger(); } else if (logger instanceof Log4jLoggerAdapter) { return LogManager.getLogger(loggerName); } else { return null; } }
private static org.apache.log4j.Logger getLogger(final Logger slf4jLogger) { if (!(slf4jLogger instanceof Log4jLoggerAdapter)) throw new IllegalArgumentException("SLF4J logger must be a Log4j logger, but was: " + slf4jLogger.getClass().getCanonicalName()); try { return tryGetLogger((Log4jLoggerAdapter) slf4jLogger); } catch (Exception e) { throw new RuntimeException("Failed to enable log capture for Log4J", e); } }
/** * Start embed zookeeper server in a child process. * * @return null if start child process failed, non empty string if valid zookeeper server in child. */ public static String startChildZooKeeperProcess(String zkJavaOpts) throws IOException { // 1. prepare working dir String zooKeeperWorkingDir = getZooKeeperWorkingDir(); boolean isSuccessful = createFolder(zooKeeperWorkingDir); if(!isSuccessful) { zooKeeperWorkingDir = getZooKeeperWorkingDir("zookeeper_" + System.currentTimeMillis()); createFolder(zooKeeperWorkingDir); } // 2. prepare conf file final String confName = zooKeeperWorkingDir + File.separator + "zoo.cfg"; int validZkPort = getValidZooKeeperPort(); prepZooKeeperConf(zooKeeperWorkingDir, confName, validZkPort + ""); // 3. prepare process buider command ProcessBuilder processBuilder = new ProcessBuilder(); List<String> commandList = new ArrayList<String>(); String javaHome = System.getProperty("java.home"); if(javaHome == null) { throw new IllegalArgumentException("java.home is not set!"); } commandList.add(javaHome + "/bin/java"); String[] zkJavaOptsArray = zkJavaOpts.split(" "); if(zkJavaOptsArray != null) { commandList.addAll(Arrays.asList(zkJavaOptsArray)); } commandList.add("-cp"); commandList.add(findContainingJar(Log4jLoggerAdapter.class) + ":" + findContainingJar(Logger.class) + ":" + findContainingJar(org.apache.log4j.Logger.class) + ":" + findContainingJar(ZooKeeperUtils.class) + ":" + findContainingJar(QuorumPeerMain.class)); commandList.add(ZooKeeperMain.class.getName()); commandList.add(confName); processBuilder.command(commandList); File execDirectory = new File(zooKeeperWorkingDir); processBuilder.directory(execDirectory); processBuilder.redirectErrorStream(true); LOG.info("onlineZooKeeperServers: Attempting to start ZooKeeper server with command {} in directory {}.", commandList, execDirectory.toString()); // 4. start process Process zkProcess = null; StreamCollector zkProcessCollector; synchronized(ZooKeeperUtils.class) { zkProcess = processBuilder.start(); zkProcessCollector = new StreamCollector(zkProcess.getInputStream()); zkProcessCollector.start(); } Runtime.getRuntime().addShutdownHook( new Thread(new ZooKeeperShutdownHook(zkProcess, zkProcessCollector, zooKeeperWorkingDir))); LOG.info("onlineZooKeeperServers: Shutdown hook added."); // 5. check and wait for server just started. String hostname = getLocalHostName(); if(isServerAlive(hostname, validZkPort)) { return hostname + ":" + validZkPort; } else { return null; } }
@Test (timeout=60000) @SuppressWarnings("deprecation") public void testDynamicLogLevel() throws Exception { String logName = TestLogLevel.class.getName(); org.slf4j.Logger testlog = LoggerFactory.getLogger(logName); //only test Log4JLogger if (testlog instanceof Log4jLoggerAdapter) { Logger log = LogManager.getLogger(logName); log.debug("log.debug1"); log.info("log.info1"); log.error("log.error1"); assertTrue(!Level.ERROR.equals(log.getEffectiveLevel())); HttpServer server = null; try { server = new HttpServer.Builder().setName("..") .addEndpoint(new URI("http://localhost:0")).setFindPort(true) .build(); server.start(); String authority = NetUtils.getHostPortString(server .getConnectorAddress(0)); //servlet URL url = new URL("http://" + authority + "/logLevel?log=" + logName + "&level=" + Level.ERROR); out.println("*** Connecting to " + url); try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) { for(String line; (line = in.readLine()) != null; out.println(line)); } log.debug("log.debug2"); log.info("log.info2"); log.error("log.error2"); assertTrue(Level.ERROR.equals(log.getEffectiveLevel())); //command line String[] args = {"-setlevel", authority, logName, Level.DEBUG.toString()}; LogLevel.main(args); log.debug("log.debug3"); log.info("log.info3"); log.error("log.error3"); assertTrue(Level.DEBUG.equals(log.getEffectiveLevel())); } finally { if (server != null) { server.stop(); } } } else { out.println(testlog.getClass() + " not tested."); } }
private static org.apache.log4j.Logger tryGetLogger(final Log4jLoggerAdapter slf4jLogger) throws NoSuchFieldException, IllegalAccessException { final Field field = Log4jLoggerAdapter.class.getDeclaredField(LOGGER_FIELD_NAME); field.setAccessible(true); return (org.apache.log4j.Logger) field.get(slf4jLogger); }
@Override protected boolean bindsToLoggingFramework(final Logger logger) { return (logger instanceof Log4jLoggerAdapter); }
@Override protected String getName() { return Log4jLoggerAdapter.class.getName(); }