首先定义一个工具类Log4jConfig,具体如下:
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
public class Log4jConfig {
public void enableInfo(String target){
LogManager.getLogger(target).setLevel(Level.INFO);
}
public void enableWarn(String target){
LogManager.getLogger(target).setLevel(Level.WARN);
}
public void enableError(String target){
LogManager.getLogger(target).setLevel(Level.ERROR) ;
}
public void enableDebug(String target){
LogManager.getLogger(target).setLevel(Level.DEBUG) ;
}
public void enableTrack(String target){
LogManager.getLogger(target).setLevel(Level.TRACE) ;
}
public void enableOff(String target){
LogManager.getLogger(target).setLevel(Level.OFF) ;
}
}
然后定义action,定义为Log4jAction,里面定义3个方法分别用户新增日志对象、查询日志对象列表、更改日志对象的级别,具体如下:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
public class Log4jAction {
Log4jConfig config = new Log4jConfig();
//日志对象列表
private List<Logger> loggers;
//日志对象名称
private String name;
//日志对象级别
private String level;
/**
* 日志列表*/
public String getLogList()
{
//日志列表
loggers = new ArrayList<Logger>();
//获取根日志
Logger rootLogger = Logger.getRootLogger();
loggers.add(rootLogger);
//获取当前所有的日志对象
Enumeration<Logger> enumer = (Enumeration<Logger>)rootLogger.getLoggerRepository().getCurrentLoggers();
while(enumer.hasMoreElements())
{
Logger logger = enumer.nextElement();
if((null != level) && (!"".equals(level)) && (!"ALL".equals(level))
&& (null != logger.getLevel()) && (!logger.getLevel().toString().equals(level)))
{
continue;
}
if((null != name) && (!"".equals(name)) && (!logger.getName().contains(name)))
{
continue;
}
loggers.add(logger);
}
return SUCCESS;
}
/**
* 更新日志级别
* @return
*/
public String editLoggerLevel()
{
if(Level.INFO.toString().equals(level))
{
config.enableInfo(name);
}
else if(Level.ERROR.toString().equals(level))
{
config.enableError(name);
}
else if(Level.DEBUG.toString().equals(level))
{
config.enableDebug(name);
}
else if(Level.WARN.toString().equals(level))
{
config.enableWarn(name);
}
else if(Level.OFF.toString().equals(level))
{
config.enableOff(name);
}
return SUCCESS;
}
/**
* 新增日志对象
* @return
* @throws IOException
*/
public String addNewLogger() throws IOException
{
Logger log = ("".equals(name) ?
Logger.getRootLogger() : Logger.getLogger(name));
log.setLevel(Level.toLevel(level, Level.DEBUG));
printStr("1");
return null;
}
public void printStr(String jsonStr) throws IOException{
HttpServletResponse httpServletResponse = ServletActionContext.getResponse();
httpServletResponse.setCharacterEncoding("UTF-8");
httpServletResponse.setContentType("text/x-json;charset=UTF-8");
PrintWriter pw = httpServletResponse.getWriter();
pw.print(jsonStr);
pw.flush();
pw.close();
}
/**
* @return loggers
*/
public List<Logger> getLoggers() {
return loggers;
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return level
*/
public String getLevel() {
return level;
}
/**
* @param level
*/
public void setLevel(String level) {
this.level = level;
}
}
然后在sturts配置文件中配置action具体如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="log4j" extends="struts-default" namespace="/">
<action name="getLogList" class="log4jAction" method="getLogList">
<result name="success" >/log4j2.jsp</result>
</action>
<action name="editLoggerLevel" class="log4jAction" method="editLoggerLevel" >
<result name="success" type="redirect">getLogList.do </result>
</action>
<action name="addNewLogger" class="log4jAction" method="addNewLogger" >
</action>
</package>
</struts>
接着实现页面log4j.jsp,具体如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<style type="text/css">
.add{ height:30px; line-height:30px; float:right; font-size:14px;}
.add a{ color:#000000; margin:0px 10px;}
.clear{ display:block; height:0px; line-height:0px; font-size:0px; clear:both;}
.fd{ width:100%; height:auto; position:absolute; top:150px; left:0px; z-index:1; display:none;}
.fd_box{ width:320px; height:auto; margin:0px auto; position:relative; }
.tm_box{ width:300px; height:200px; padding:10px; background-color:#808080; -webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px; FILTER: alpha(opacity=50); opacity: 0.5; -moz-opacity: 0.5; position:absolute; top:0px; left:0px; z-index:2;}
.add_box{ width:280px; height:180px; padding:10px; background-color:#808080; -webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px; position:absolute; top:10px; left:10px; z-index:3; font-family:"宋体";}
.add_box h1{ width:270px; height:30px; line-height:30px; font-size:14px; margin:0px; padding:0px 5px; font-weight:100; color:#666666; border-bottom:1px solid #009999;}
.add_box span{ color:#000000; display:block; margin:10px 0px; padding:0px 5px;}
.clos{ width:14px; height:13px; background-image:url(/images/close3.gif); background-repeat:no-repeat; position:absolute; top:25px; right:25px; z-index:4; cursor: pointer;}
.box{ width:760px; height:auto; margin:0px auto; border-top:1px solid #f9f9f9;}
.box img{ margin:50px auto; display:block; border:0px;}
</style>
<script type="text/javascript" src="script/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#addNewLogger").click( function(){
$(".fd").show();
return false;
});
$(".clos").click( function(){
$(".fd").hide();
});
$("#addButton").click( function(){
var level = $("#logLevel").val();
var name = $("#logName").val();
if(level=='')
{
alert("Level must be not null!!!");
return;
}
if(name=='')
{
alert("Name must be not null!!!");
return;
}
var param={};
param['level'] = level;
param["name"] = name;
$.post("addNewLogger.do",param,function(data){
if(data == "1"){
alert("Add new logger success!!!");
window.location.href = "getLogList.do";
}
else {
alert("System error!!!");
}
$(".fd").hide();
});
});
});
</script>
<div>
<form action="getLogList.do" method="post">
<table style="margin-bottom: 8px;" cellspacing="0" cellpadding="0"
width="60%" border="0" align="center">
<tbody>
<tr>
<td class="f66" align="center" width="80%" height="36px">Level:
<select name="level">
<option value="ALL" selected="selected">ALL</option>
<s:generator separator="," val="'DEBUG,INFO,WARN,ERROR,OFF'">
<s:iterator value="top" id="inner">
<option value="<s:property/>" <s:if test="#requestlevel==#inner">selected="selected </s:if>><s:property/></option>
</s:iterator>
</s:generator>
</select>
logger: <input id="name" name="name" value="${name }"/>
<input id="search" type="submit" value="search" name="search" class="scbtn"/>
</td>
<td align="center">
<input type="button" value="addNewLogger" id="addNewLogger" />
</td>
</tr>
</tbody>
</table>
</form>
<div class="fd">
<div class="fd_box">
<div class="tm_box"></div>
<div class="add_box">
<h1 style="color:#000000">Add New Logger</h1>
<span>Level: <select style="width:150px; height:23px;" id="logLevel" name="logLevel">
<option value="DEBUG" selected="selected">DEBUG</option>
<s:generator separator="," val="'INFO,WARN,ERROR,OFF'">
<s:iterator>
<option value="<s:property/>"><s:property/></option>
</s:iterator>
</s:generator>
</select>
</span>
<span>Name: <input id="logName" name="logName" id="logName" type="text" /></span>
<span> <input id="addButton" value="Add" name="addButton" type="button" /></span>
</div>
<div class="clos"></div>
</div>
</div>
<table id="gvNews" style="width: 80%; color: #333333;"
cellspacing="1" cellpadding="3" border="1" align="center">
<tbody>
<tr>
<th scope="col" width="100px">
Level
</th>
<th scope="col">
Logger
</th>
<th scope="col" width="400px">
Set New Level
</th>
</tr>
<s:iterator value="loggers" var="bean" status="st">
<tr>
<td align="center">
${level}
</td>
<td>
${name}
</td>
<td>
<s:generator separator="," val="'DEBUG,INFO,WARN,ERROR,OFF'">
<s:iterator>
<a href="editLoggerLevel.do?name=${name}&level=<s:property/>"> <s:property/> </a>
</s:iterator>
</s:generator>
</td>
</tr>
</s:iterator>
</tbody>
</table>
</div>