Log4j 实现运行时的日志级别更改

来源:互联网 发布:馒头日记 知乎 编辑:程序博客网 时间:2024/05/16 08:34

首先定义一个工具类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>


 

0 0
原创粉丝点击