Skip to content

Instantly share code, notes, and snippets.

@iamkristian
Last active May 3, 2023 05:04
Show Gist options
  • Select an option

  • Save iamkristian/943918 to your computer and use it in GitHub Desktop.

Select an option

Save iamkristian/943918 to your computer and use it in GitHub Desktop.

Revisions

  1. iamkristian revised this gist May 3, 2023. 1 changed file with 6 additions and 1 deletion.
    7 changes: 6 additions & 1 deletion log4jAdmin.jsp
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,12 @@
    <%@ page import="java.util.Set" %>
    <%@ page import="java.util.Arrays" %>
    <%
    /* This was originally suggested by Nelz on http://nelz.net/2008/04/08/log4j-runtime-configuration */
    /* This was originally suggested by Nelz on http://nelz.net/2008/04/08/log4j-runtime-configuration
    and maybe also in this zip as suggested in the comments
    https://web.archive.org/web/20051016184059/http://ftpna2.bea.com/pub/downloads/Log4jAdmin.zip
    This post is ancient - and if you believe System.currentTimeMillis() is proprietary or otherwise copies your work bad luck
    I don't have any example for log4j2 - don't use it and haven't used JSP for at least 13 years
    */
    long beginPageLoadTime = System.currentTimeMillis();%>

    <html>
  2. Kristian Rasmussen revised this gist Jul 31, 2012. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion log4jAdmin.jsp
    Original file line number Diff line number Diff line change
    @@ -6,7 +6,9 @@
    <%@ page import="java.util.Enumeration" %>
    <%@ page import="java.util.Set" %>
    <%@ page import="java.util.Arrays" %>
    <% long beginPageLoadTime = System.currentTimeMillis();%>
    <%
    /* This was originally suggested by Nelz on http://nelz.net/2008/04/08/log4j-runtime-configuration */
    long beginPageLoadTime = System.currentTimeMillis();%>

    <html>
    <head>
  3. Kristian Rasmussen renamed this gist Apr 28, 2011. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. Kristian Rasmussen created this gist Apr 27, 2011.
    280 changes: 280 additions & 0 deletions log4jadmin.jsp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,280 @@
    <%@ 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="log4jAdmin.jsp" name="logFilterForm">Filter Loggers:&nbsp;&nbsp;
    <input name="logNameFilter" type="text" size="50" value="<%=(logNameFilter == null ? "":logNameFilter)%>"
    class="filterText"/>
    <input name="logNameFilterType" type="submit" value="<%=beginsWithFilter%>" class="filterButton"/>&nbsp;
    <input name="logNameFilterType" type="submit" value="<%=containsFilter%>" class="filterButton"/>&nbsp;
    <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 = "log4jAdmin.jsp?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>&nbsp;
    <%
    }
    }
    %>
    </td>
    </tr>
    <%
    }
    %>
    </table>
    <h2>
    Revision: 1.0<br/>
    Page Load Time (Millis): <%=(System.currentTimeMillis() - beginPageLoadTime)%>
    </h2>
    </div>
    </body>
    </html>