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

首先定义一个工具类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 loggers;
	
	//日志对象名称
	private String name;
	//日志对象级别
	private String level;
	
	/** 
	 * 日志列表*/
	public String getLogList()
	{
		//日志列表
		loggers = new ArrayList();
		//获取根日志
		Logger rootLogger = Logger.getRootLogger();		
		loggers.add(rootLogger);
				
		//获取当前所有的日志对象
		Enumeration enumer = (Enumeration)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 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具体如下:




	
		
			/log4j2.jsp
		
		
		
			getLogList.do   
			
		
		
			
					
	


接着实现页面log4j.jsp,具体如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    
    
    
	
Level:         logger:        

Add New Logger

Level: Name:          
Level Logger Set New Level
${level} ${name}      


 

你可能感兴趣的:(Log4j 实现运行时的日志级别更改)