`
nid007
  • 浏览: 45489 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

log4j DEBUG工具类

    博客分类:
  • java
 
阅读更多
<%@ 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.*"%>
<% long beginPageLoadTime = System.currentTimeMillis();%>
<%
String ip = request.getRemoteAddr();
String allowStart = "192.168.";
if(!ip.startsWith(allowStart)){
	response.setStatus(403);
	out.print("your ip " + ip + " is not allowed!");
	return;
}
%>

<html>
  <head>
    <title>Log4J Admin</title>
    <style type="text/css">
      <!--
      #content { margin: 0px; padding: 0px; text-align: center; background-color: #ccc; border: 0px 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: #0cc; padding: 1px; 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: #0cc; color: #fff; padding-left: 5px; text-align: left; border:1px solid #0cc; 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: #06C; 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 : "");                                                
                                  
              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>  
        Page Load Time (Millis): <%=(System.currentTimeMillis() - beginPageLoadTime)%>
      </h2>      
    </div>
  </body>
</html>
分享到:
评论

相关推荐

    log4j记录Debug日志

    在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`log4j.properties`或`log4j.xml`文件,设置DEBUG级别,然后在代码中使用Logger对象进行日志记录。例如: ```java import org.apache.log4...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...

    log4j(内含log4j的jar包和log4j的配置文件:有DEBUG和INFO两种)

    标题提到的是"log4j(内含log4j的jar包和log4j的配置文件:有DEBUG和INFO两种)",这表明我们讨论的是一个关于日志管理的工具——Log4j,它是一个广泛使用的Java日志框架。其中包含的jar包是Log4j的运行库,而配置文件...

    log4j 工具类 多个日志文件

    &lt;appender name="fileDebug" class="org.apache.log4j.FileAppender"&gt; &lt;param name="File" value="debug.log"/&gt; &lt;layout class="org.apache.log4j.PatternLayout"&gt; &lt;filter class="org.apache.log4j.varia....

    log4j使用jar文件

    总结来说,Log4j是一个强大的日志工具,它通过配置文件和简单的API为Java应用程序提供了定制化的日志记录功能。理解和掌握Log4j的使用,对于任何Java开发者来说都是十分有益的,因为它能够帮助优化调试过程,提升...

    log4j-API-最新稳定版本log4j-1.2.17

    1. **日志级别**:Log4j API支持多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL。这些级别允许开发者根据需要过滤不同严重程度的消息。 2. **日志器(Logger)**:每个日志器代表一个特定的命名空间,用于记录...

    log4j-1.2.15.jar

    1. **引入依赖**:在项目中添加Log4j 1.2.15.jar依赖,可以手动下载放入类路径,或者通过Maven或Gradle等构建工具进行管理。 2. **配置文件**:创建log4j.properties或log4j.xml配置文件,设置日志级别、Appender、...

    Log4J完整说明和配置

    log4j.rootLogger=DEBUG,CONSOLE,A1,im ``` 这里指定了根logger的日志级别为`DEBUG`,并将日志输出到名为`CONSOLE`、`A1`和`im`的Appender中。 ##### 3.2 Logger附加属性 ```properties log4j.addivity.org.apache=...

    log4j.jar包,和log4j.properties配置文件下载

    总的来说,Log4j是一个强大且灵活的日志工具,对于任何Java开发项目来说都是必不可少的组件。它通过`log4j.jar`提供核心功能,通过`log4j.properties`进行个性化配置,为开发者提供了一套完整的日志解决方案。

    log4j实用配置扩展

    #### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...

    log4j简单使用

    - `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j进行日志记录的核心组件。 - `commons-logging-1.0.4.jar`: 这是Apache Commons Logging库,它是Java日志API的一个抽象...

    Log4j将System.out搞到log4j中输出四

    在《Log4j将System.out搞到log4j中输出四》这篇博文中,作者可能详细讨论了这些步骤,并可能分享了一些实战经验。通过学习这篇博文,读者可以更深入地了解如何在实际项目中实现这一转换,提升日志管理的效率。 总结...

    log4j.1.2.17

    Log4j,作为Java世界中最广泛使用的日志框架之一,因其强大的功能和灵活的配置,成为了开发者的首选工具。本文将重点围绕Log4j 1.2.17版本展开,详细介绍其核心概念、使用方法以及配置细节。 1. **Log4j简介** Log...

    log4j配置和加载方法

    Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地理解和应用log4j。 #### Log4j...

    新版本与旧版本log4j.jar包下载,附使用说明----.zip

    3. **IDEA与log4j**: IntelliJ IDEA(简称IDEA)是一款流行的Java集成开发环境,它支持将log4j集成到项目中,通过配置pom.xml或build.gradle文件添加依赖,或者手动将log4j.jar添加到项目的类路径下,以便在IDEA中...

    apache-log4j-1.2.16.rar_apache log4j 1.2.16_log4j source code_lo

    通过分析和学习Log4j的源代码,开发者可以更好地理解和利用这个强大的工具,解决在实际项目中遇到的日志问题,定制自己的日志解决方案,或者为开源社区贡献新的特性或修复已知问题。总之,熟悉并掌握Log4j的内部工作...

    log4j-2.17.1的jar包,导入即可使用

    3. **导入使用**:在Java项目中使用Log4j非常简单,只需要将`log4j-2.17.1.jar`文件添加到项目的类路径(Classpath)中。对于Maven或Gradle项目,可以在依赖管理中添加相应的依赖条目。 4. **配置文件**:Log4j 的...

    log4j-1.2.17.jar及配置文件

    这个jar文件包含了Log4j 1.2.17的所有类和资源,是使用Log4j的基础。在Java应用程序中,我们通常会将log4j-1.2.17.jar添加到项目的类路径中,以便调用其API进行日志记录。例如,通过以下代码创建一个名为"DEBUG"的...

    log4j使用jar包和log4j.properties配置文件

    Log4j作为Java日志处理的重要工具,通过其灵活的配置和强大的功能,可以帮助开发者更好地理解和管理应用的运行状态。1.2.17版本的Log4j jar包和`log4j.properties`配置文件是实现这一目标的基础。正确地引入和配置这...

    log4j详细配置说明

    在当前强调可重用组件的软件开发环境中,Apache 的 Log4j 为开发者提供了强大的日志管理工具。Log4j 不仅开源免费,还具备高度的灵活性与可配置性,支持多种日志输出目的地(例如控制台、文件、GUI 组件、网络套接字...

Global site tag (gtag.js) - Google Analytics