在junit单元测试时,log4j无法记录异常信息
本人使用junit4单元进行spring mvc+hibernate的单元测试时,遇到这个问题。junit测试代码
@Test
public void searchUserTest() throws Exception{
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
user.setId(1);
Integer.parseInt("a");
request.setRequestURI("/user/search.htm");
request.setMethod("POST");
request.getSession().setAttribute(BaseConfig.USERINFO, user);
request.setParameter("page", "1");
request.setParameter("rows", "10");
request.setParameter("user", "{\"role\":1}");
this.excute(request, response);
}
controller主要代码
@Controller
@RequestMapping(value="/user")
public class UserController {@RequestMapping(value="/search.htm",method=RequestMethod.POST)
public void getUsersByPage(HttpServletRequest request,HttpServletResponse response)
throws IOException{
String user = request.getParameter("user");
String page = request.getParameter("page");
String rows = request.getParameter("rows");
JSONObject obj = userService.getUsersByPage(user, Integer.parseInt(page), Integer.parseInt(rows));
Reply reply = new Reply();
reply.setMessage("succ");
reply.setData(obj);
response.getWriter().print(obj.toString());
}}
现在的问题是,如果在类的前面加上@RequestMapping(value="/user"),方法前面加上{@RequestMapping(value="/search.htm",method=RequestMethod.POST)。那么单元测试时,提示找不到路径,报空指针异常。但是如果去掉@RequestMapping(value="/user"),将@RequestMapping(value="/search.htm",method=RequestMethod.POST)改为@RequestMapping(value="/user/search.htm",method=RequestMethod.POST)就可以成功。这是为什么呢?
为了找到原因,本人加入了log4j记录日志,但是又遇到问题了,log4j无法记录junit单元测试时的异常信息,只能记录spring和hibernate初始化的信息(debug和info)都能正常记录。
log4j配置文件如下
log4j.rootLogger=DEBUG,debug
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}][%t] %c - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = DEBUG
log4j.appender.info.append=true
log4j.appender.info.File=D:/logs/INFO_1.log
很奇怪的是,不管我如何修改log4j.appender.info.Threshold日志级别,总是会记录debug的信息。
求教育 --------------------编程问答-------------------- log4j配置文件打错了,是这样得:
log4j.rootLogger=DEBUG,debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}][%t] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=D:/logs/INFO_1.log
log4j配置文件时没有问题,因为在web工程运行的时候是可以正常记录日志的。
补充:Java , Java EE