<%@ 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:
<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 = "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>
<%
}
}
%>
</td>
</tr>
<%
}
%>
</table>
<h2>
Page Load Time (Millis): <%=(System.currentTimeMillis() - beginPageLoadTime)%>
</h2>
</div>
</body>
</html>
分享到:
相关推荐
在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`log4j.properties`或`log4j.xml`文件,设置DEBUG级别,然后在代码中使用Logger对象进行日志记录。例如: ```java import org.apache.log4...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
标题提到的是"log4j(内含log4j的jar包和log4j的配置文件:有DEBUG和INFO两种)",这表明我们讨论的是一个关于日志管理的工具——Log4j,它是一个广泛使用的Java日志框架。其中包含的jar包是Log4j的运行库,而配置文件...
<appender name="fileDebug" class="org.apache.log4j.FileAppender"> <param name="File" value="debug.log"/> <layout class="org.apache.log4j.PatternLayout"> <filter class="org.apache.log4j.varia....
总结来说,Log4j是一个强大的日志工具,它通过配置文件和简单的API为Java应用程序提供了定制化的日志记录功能。理解和掌握Log4j的使用,对于任何Java开发者来说都是十分有益的,因为它能够帮助优化调试过程,提升...
1. **日志级别**:Log4j API支持多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL。这些级别允许开发者根据需要过滤不同严重程度的消息。 2. **日志器(Logger)**:每个日志器代表一个特定的命名空间,用于记录...
1. **引入依赖**:在项目中添加Log4j 1.2.15.jar依赖,可以手动下载放入类路径,或者通过Maven或Gradle等构建工具进行管理。 2. **配置文件**:创建log4j.properties或log4j.xml配置文件,设置日志级别、Appender、...
log4j.rootLogger=DEBUG,CONSOLE,A1,im ``` 这里指定了根logger的日志级别为`DEBUG`,并将日志输出到名为`CONSOLE`、`A1`和`im`的Appender中。 ##### 3.2 Logger附加属性 ```properties log4j.addivity.org.apache=...
总的来说,Log4j是一个强大且灵活的日志工具,对于任何Java开发项目来说都是必不可少的组件。它通过`log4j.jar`提供核心功能,通过`log4j.properties`进行个性化配置,为开发者提供了一套完整的日志解决方案。
#### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...
- `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,作为Java世界中最广泛使用的日志框架之一,因其强大的功能和灵活的配置,成为了开发者的首选工具。本文将重点围绕Log4j 1.2.17版本展开,详细介绍其核心概念、使用方法以及配置细节。 1. **Log4j简介** Log...
Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地理解和应用log4j。 #### Log4j...
3. **IDEA与log4j**: IntelliJ IDEA(简称IDEA)是一款流行的Java集成开发环境,它支持将log4j集成到项目中,通过配置pom.xml或build.gradle文件添加依赖,或者手动将log4j.jar添加到项目的类路径下,以便在IDEA中...
通过分析和学习Log4j的源代码,开发者可以更好地理解和利用这个强大的工具,解决在实际项目中遇到的日志问题,定制自己的日志解决方案,或者为开源社区贡献新的特性或修复已知问题。总之,熟悉并掌握Log4j的内部工作...
3. **导入使用**:在Java项目中使用Log4j非常简单,只需要将`log4j-2.17.1.jar`文件添加到项目的类路径(Classpath)中。对于Maven或Gradle项目,可以在依赖管理中添加相应的依赖条目。 4. **配置文件**:Log4j 的...
这个jar文件包含了Log4j 1.2.17的所有类和资源,是使用Log4j的基础。在Java应用程序中,我们通常会将log4j-1.2.17.jar添加到项目的类路径中,以便调用其API进行日志记录。例如,通过以下代码创建一个名为"DEBUG"的...
Log4j作为Java日志处理的重要工具,通过其灵活的配置和强大的功能,可以帮助开发者更好地理解和管理应用的运行状态。1.2.17版本的Log4j jar包和`log4j.properties`配置文件是实现这一目标的基础。正确地引入和配置这...
在当前强调可重用组件的软件开发环境中,Apache 的 Log4j 为开发者提供了强大的日志管理工具。Log4j 不仅开源免费,还具备高度的灵活性与可配置性,支持多种日志输出目的地(例如控制台、文件、GUI 组件、网络套接字...