功能点说明:
不需要重启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其他相关文章: