Normally a quick check of the log4j's property file would give you the answer, but in this case there was a third party application that had multiple ways of defining the log level both at startup and then runtime.
After a quick search I found this blog post: http://nelz.net/2008/04/08/log4j-runtime-configuration/
This will not only show you the runtime value of the loggers but also enable you to change this without require a restart of the application.
In order to rename log4jAdmin.jsp, grab it from the blog and perform the following steps:
Find: "/log4jAdmin.jsp
Replace with: request.getContextPath() + request.getServletPath() + "
Find: log4jAdmin.jsp
Replace with: <%=request.getContextPath() + request.getServletPath() %>
Screenshot:
The JSP with the customisations:
<%@ page language="java" contentType="text/html;charset=UTF-8" %> <%@ page import="org.apache.log4j.Level" %> <%@ page import="org.apache.log4j.LogManager" %> <%@ page import="org.apache.log4j.Logger" %> <%@ page import="java.util.HashMap" %> <%@ page import="java.util.Enumeration" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.Arrays" %> <% long beginPageLoadTime = System.currentTimeMillis();%> <html> <head> <title>Log4J Administration</title> <style type="text/css"> <!-- #content { margin: 0px; padding: 0px; text-align: center; background-color: #ccc; border: 1px solid #000; width: 100%; } body { position: relative; margin: 10px; padding: 0px; color: #333; } h1 { margin-top: 20px; font: 1.5em Verdana, Arial, Helvetica sans-serif; } h2 { margin-top: 10px; font: 0.75em Verdana, Arial, Helvetica sans-serif; text-align: left; } a, a:link, a:visited, a:active { color: red; text-decoration: none; text-transform: uppercase; } table { width: 100%; background-color: #000; padding: 3px; border: 0px; } th { font-size: 0.75em; background-color: #ccc; color: #000; padding-left: 5px; text-align: center; border: 1px solid #ccc; white-space: nowrap; } td { font-size: 0.75em; background-color: #fff; white-space: nowrap; } td.center { font-size: 0.75em; background-color: #fff; text-align: center; white-space: nowrap; } .filterForm { font-size: 0.9em; background-color: #000; color: #fff; padding-left: 5px; text-align: left; border: 1px solid #000; white-space: nowrap; } .filterText { font-size: 0.75em; background-color: #fff; color: #000; text-align: left; border: 1px solid #ccc; white-space: nowrap; } .filterButton { font-size: 0.75em; background-color: #000; color: #fff; padding-left: 5px; padding-right: 5px; text-align: center; border: 1px solid #ccc; width: 100px; white-space: nowrap; } --> </style> </head> <body onLoad="javascript:document.logFilterForm.logNameFilter.focus();"> <% String containsFilter = "Contains"; String beginsWithFilter = "Begins With"; String[] logLevels = {"debug", "info", "warn", "error", "fatal", "off"}; String targetOperation = (String) request.getParameter("operation"); String targetLogger = (String) request.getParameter("logger"); String targetLogLevel = (String) request.getParameter("newLogLevel"); String logNameFilter = (String) request.getParameter("logNameFilter"); String logNameFilterType = (String) request.getParameter("logNameFilterType"); %> <div id="content"> <h1>Log4J Administration</h1> <div class="filterForm"> <form action="<%=request.getContextPath() + request.getServletPath() %>" name="logFilterForm"> Filter Loggers: <input name="logNameFilter" type="text" size="50" value="<%=(logNameFilter == null ? "":logNameFilter)%>" class="filterText"/> <input name="logNameFilterType" type="submit" value="<%=beginsWithFilter%>" class="filterButton"/> <input name="logNameFilterType" type="submit" value="<%=containsFilter%>" class="filterButton"/> <input name="logNameClear" type="button" value="Clear" class="filterButton" onmousedown='javascript:document.logFilterForm.logNameFilter.value="";'/> <input name="logNameReset" type="reset" value="Reset" class="filterButton"/> <param name="operation" value="changeLogLevel"/> </form> </div> <table cellspacing="1"> <tr> <th width="25%">Logger</th> <th width="25%">Parent Logger</th> <th width="15%">Effective Level</th> <th width="35%">Change Log Level To</th> </tr> <% Enumeration loggers = LogManager.getCurrentLoggers(); HashMap loggersMap = new HashMap(128); Logger rootLogger = LogManager.getRootLogger(); if (!loggersMap.containsKey(rootLogger.getName())) { loggersMap.put(rootLogger.getName(), rootLogger); } while (loggers.hasMoreElements()) { Logger logger = (Logger) loggers.nextElement(); if (logNameFilter == null || logNameFilter.trim().length() == 0) { loggersMap.put(logger.getName(), logger); } else if (containsFilter.equals(logNameFilterType)) { if (logger.getName().toUpperCase().indexOf(logNameFilter.toUpperCase()) >= 0) { loggersMap.put(logger.getName(), logger); } } else { // Either was no filter in IF, contains filter in ELSE IF, or begins with in ELSE if (logger.getName().startsWith(logNameFilter)) { loggersMap.put(logger.getName(), logger); } } } Set loggerKeys = loggersMap.keySet(); String[] keys = new String[loggerKeys.size()]; keys = (String[]) loggerKeys.toArray(keys); Arrays.sort(keys, String.CASE_INSENSITIVE_ORDER); for (int i = 0; i < keys.length; i++) { Logger logger = (Logger) loggersMap.get(keys[i]); // MUST CHANGE THE LOG LEVEL ON LOGGER BEFORE GENERATING THE LINKS AND THE // CURRENT LOG LEVEL OR DISABLED LINK WON'T MATCH THE NEWLY CHANGED VALUES if ("changeLogLevel".equals(targetOperation) && targetLogger.equals(logger.getName())) { Logger selectedLogger = (Logger) loggersMap.get(targetLogger); selectedLogger.setLevel(Level.toLevel(targetLogLevel)); } String loggerName = null; String loggerEffectiveLevel = null; String loggerParent = null; if (logger != null) { loggerName = logger.getName(); loggerEffectiveLevel = String.valueOf(logger.getEffectiveLevel()); loggerParent = (logger.getParent() == null ? null : logger.getParent().getName()); } %> <tr> <td><%=loggerName%></td> <td><%=loggerParent%></td> <td><%=loggerEffectiveLevel%></td> <td class="center"> <% for (int cnt = 0; cnt < logLevels.length; cnt++) { String url = request.getContextPath() + request.getServletPath() + "?operation=changeLogLevel&logger=" + loggerName + "&newLogLevel=" + logLevels[cnt] + "&logNameFilter=" + (logNameFilter != null ? logNameFilter : "") + "&logNameFilterType=" + (logNameFilterType != null ? logNameFilterType : ""); if (logger.getLevel() == Level.toLevel(logLevels[cnt]) || logger.getEffectiveLevel() == Level.toLevel(logLevels[cnt])) { %> [<%=logLevels[cnt].toUpperCase()%>] <% } else { %> <a href='<%=url%>'>[<%=logLevels[cnt]%>]</a> <% } } %> </td> </tr> <% } %> </table> <h2> Revision: 1.0<br/> Page Load Time (Millis): <%=(System.currentTimeMillis() - beginPageLoadTime)%> </h2> </div> </body> </html>
Pleasant Tips..Thanks for Sharing….We keep up hands on approach at work and in the workplace, keeping our business pragmatic, which recommends we can help you with your tree clearing and pruning in an invaluable and fit way.
ReplyDeleteSelenium training in Chennai
Selenium training in Bangalore
Selenium training in Pune
Selenium Online training
I really like the dear information you offer in your articles. I’m able to bookmark your site and show the kids check out up here generally. Im fairly positive theyre likely to be informed a great deal of new stuff here than anyone
ReplyDeletepython Training in Pune
python Training in Chennai
python Training in Bangalore
I appreciate your efforts because it conveys the message of what you are trying to say. It's a great skill to make even the person who doesn't know about the subject could able to understand the subject . Your blogs are understandable and also elaborately described.
ReplyDeleteoracle training in chennai
oracle training in tambaram
oracle dba training in chennai
oracle dba training in tambaram
ccna training in chennai
ccna training in tambaram
seo training in chennai
seo training in tambaram
Irrespective of rankings, this will help in huge traffic generation, on your website, over time and, in turn,will steadily increase the number of potential customers for your products and services.
ReplyDeletesap training in chennai
sap training in velachery
azure training in chennai
azure training in velachery
cyber security course in chennai
cyber security course in velachery
ethical hacking course in chennai
ethical hacking course in velachery
Thanks for one marvelous posting! I enjoyed reading it; you are a great author. I will make sure to bookmark your blog and may come back someday. I want to encourage that you continue your great posts, have a nice weekend!
ReplyDeletehardware and networking training in chennai
hardware and networking training in annanagar
xamarin training in chennai
xamarin training in annanagar
ios training in chennai
ios training in annanagar
iot training in chennai
iot training in annanagar
Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here.
ReplyDeleteweb designing training in chennai
web designing training in omr
digital marketing training in chennai
digital marketing training in omr
rpa training in chennai
rpa training in omr
tally training in chennai
tally training in omr
very useful code
ReplyDeleteApplication packagining training
Blockchain training
C training
Data power training
Data Stage training
Dynamic CRM Training
Informatica idq training