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>