初学log4j,参考了网上很多代码。在过滤器中写输入到数据库的userName的时候,如果不加注释的两句,在数据库userName字段中就没有值(加上了就有),但是网上很多代码说只需要在要输出日志的函数中加这两句话就可以,没有在过滤器中加。在下不才,想问问这两句话应该放在哪里,原因是什么呢~谢谢!
public class LogFilter implements Filter{  
    //private final Log log = LogFactory.getLog(getClass());<====================(1)
      ...
      public void doFilter(ServletRequest request, ServletResponse response,  
               FilterChain chain) throws IOException, ServletException {              HttpServletRequest req=(HttpServletRequest)request;  
            HttpSession session= req.getSession();  
            String user=(String) session.getAttribute("user");  
            MDC.put("userName",user); 
          
            //log.info("");  <==========================(2)
  
            chain.doFilter(request, response);  
      }  
      ...
log4j

解决方案 »

  1.   

    一般log就是监控一个方法输入的值,
    还监控返回的值。
    你这两句就是获取log对象并记录信息。。
    我想网上说的应该是把记录log对象给封装成一个LogHelper类吧。直接调用的意思吧。
      

  2.   

    那就是应该在filter里写这两句咯?然后我在应该输出日志的函数里也写了这两句,于是数据库里一下有了两条数据难道我在函数里不应该写这两句吗?
      

  3.   

    那就是应该在filter里写这两句咯?然后我在应该输出日志的函数里也写了这两句,于是数据库里一下有了两条数据难道我在函数里不应该写这两句吗?
    log一般是这样,
    一个类里面获取一个log对象,然后在需要输出日志的地方调用这个log对象的方法。。
    至于你说调用这两句数据库里面有两条数据,这个我不是很理解。调用log会导致数据库增加数据么?我想你说的是不是log日志多了两句?
    当然我们也可以把log对象封装。用一个LogHelper中的log对象记录所有日志信息。
    这个没什么对错,一般来说,filter中我还是习惯于进行日志记录的