不需要重启服务动态修改切换log4j日志等级

功能点说明:
不需要重启tomcat服务,使用浏览器get请求接口的方式直接切换log4j的日记等级,通常常用的是INFO级别切换到DEBUG,查看错误问题,记得不使用在切换回INFO,否则在DEBUG下会一直输入内容,长时间会造成服务器内存空间被占用。

直接创建Controller文件,如果不想登录账户密码就切换,并且有shiro权限的情况下,记得将该Controller接口在shiro中设置为anon。

import java.io.Writer;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 动态修改级别
 * 
 * @author:lujingyu
 * @data:2019年9月29日上午11:18:37
 */
@Controller
@RequestMapping("/log4jLevel")
public class Log4jLevelController {

	/**
	 * 动态修改日志等级(修改全局包级别)
	 * 
	 * @param data
	 *            级别
	 * @return
	 */
	@RequestMapping(value = "/updataLog4j", method = RequestMethod.GET)
	@ResponseBody
	public String updataLog4j(String data) {
		if (null == data) {
			return "请求失败,请传递date参数";
		} else {
			if (data.equals("DEBUG") || data.equals("INFO")
					|| data.equals("WARN") || data.equals("ERROR")
					|| data.equals("FATAL") || data.equals("ALL level")
					|| data.equals("OFF level")) {
				try {
					Level level = Level.toLevel(data);
					LogManager.getRootLogger().setLevel(level);
				} catch (Exception e) {
					return "失败";
				}
				return "修改成功,可访问:/log4jLevel/loggers,接口查看当前级别";
			} else {
				return "修改失败,请按照以下7种值传递:OFF level、FATAL、ERROR、WARN、INFO、DEBUG、ALL level";
			}
		}
	}

	/**
	 * 修改单个包的日记级别 ,可通过/loggers查看要修改的包名
	 * 
	 * @param name
	 *            包名
	 * @param lev
	 *            级别
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/updataLog4jOne", method = RequestMethod.GET)
	public String change(String name, String lev) {
		if (null == lev && null == name) {
			return "请求失败,name和lev不能为空";
		} else {
			if (lev.equals("DEBUG") || lev.equals("INFO") || lev.equals("WARN")
					|| lev.equals("ERROR") || lev.equals("FATAL")
					|| lev.equals("ALL level") || lev.equals("OFF level")) {
				try {
					Level level = Level.toLevel(lev);
					Logger logger = LogManager.getLogger(name);
					logger.setLevel(level);
				} catch (Exception e) {
					return "失败";
				}
				return "修改成功,可访问:/log4jLevel/loggers,接口查看当前级别";
			} else {
				return "修改失败,请按照以下7种值传递:OFF level、FATAL、ERROR、WARN、INFO、DEBUG、ALL level";
			}
		}
	}
	/**
	 * 查看现在包的日志级别
	 * 
	 * @return
	 */
	@RequestMapping(value = "/loggers", method = RequestMethod.GET)
	public void index(HttpServletRequest request, HttpServletResponse response) {
		StringBuilder sb = new StringBuilder();
		try {
			sb.append("<html>");
			Writer writer = response.getWriter();
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/html; charset=utf-8");
			@SuppressWarnings("rawtypes")
			Enumeration logs = LogManager.getCurrentLoggers();
			while (logs.hasMoreElements()) {
				Logger logger = (Logger) logs.nextElement();
				sb.append("<span style='display:block;'>Name:");
				sb.append(logger.getName())
						.append(",<span style='display:block'>Type:")
						.append("<span style='color:red;'>")
						.append(logger.getEffectiveLevel());
				sb.append("</span>");
				sb.append("</span>");
				sb.append("</span>");
			}
			sb.append("</html>");
			writer.write(sb.toString());
			writer.flush();
			if (writer != null) {
				writer.close();
			}
			System.out.println(sb.toString());
		} catch (Exception e) {
		}
	}
	
	/**
	 * 设置Session过期时间
	 * @return
	 */
	@RequestMapping("/updateSession")
	@ResponseBody
	public String  updateSession(String type){
		if(null==type){
			return "请输入OFF或者ON";
		}else{
			if(type.equals("OFF")||type.equals("ON")){//判断传入的参数是否符合规定
				try {
					//关闭超时时间
					if(type.equals("OFF")){
						SecurityUtils.getSubject().getSession().setTimeout(-1000l);//设置时间 永不超时
						return "关闭成功,Session永不超时";
					}
					//开启超时时间未默认时间
					if(type.equals("ON")){
						SecurityUtils.getSubject().getSession().setTimeout(1800000);//设置默认时间,与spring-shiro.xml文件中的默认时间保持一致
						return "开启成功,Session默认分钟";
					}
				}catch(Exception e){
					return "设置失败";
				}
			}
			return "type参数为OFF或者ON";
		}
	}
	/**
	 * 查询Session过期时间
	 */
	@RequestMapping("/selectSession")
	@ResponseBody
	public String  selectSession(){
		long time = SecurityUtils.getSubject().getSession().getTimeout();//获取session过期时间
		if(time==-1000){
			return "Session过期时间为:永不过期";
		}
		return "Session过期时间为:"+time+"毫秒";
	}
	
}

操作语句:

/log4jLevel/loggers 查看当前等级

/log4jLevel/updataLog4j?data=等级 修改等级(全局修改)

/log4jLevel/updataLog4jOne?name=包名&lev=等级 (对单个包进行修改)

效果图:
接口地址1
在这里插入图片描述
接口地址2
在这里插入图片描述
如果有问题可同微信号联系询问:1173681997(周末勿扰谢谢)

log4j其他相关文章:

tomcat在部署多个项目后分项目输出log4j日记文件到tomcat-logs中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java°遇上鲸鱼

文章帮您解决了问题打赏1元即可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值