日志還是使用log4,直接配置好文件輸出或者控制台打印!
注解或者cml都行,我這里采用xml方式:
spring的配置文件中配置日志類和aop:
<!-- 日志監控類 --> <bean id="actionLog" class="com.zhuzher.log.ActionLogAspect"></bean> <!-- 監控所有action --> <!-- 使用cglib代理 --> <aop:config proxy-target-class="true"> <aop:pointcut id="logAction" expression="execution(* com.zhuzher.*.action.*.*(..))"/> <aop:aspect id="b" ref="actionLog"> <!-- <aop:before pointcut-ref="logAction" method="before"/> --> <aop:after pointcut-ref="logAction" method="after"/> <!-- <aop:after-returning method="afterReturn" pointcut-ref="logAction" returning="result"/> <aop:after-throwing method="afterThrow" pointcut-ref="logAction" throwing="ex"/> --> </aop:aspect> </aop:config>
,根據需要即可,
然后編寫切面類,注意,最好使用cglib代理,需要添加依賴,默認使用jdk代理的話,所代理的類必須有接口,否則報錯:
//action日志監聽 public class ActionLogAspect { private final static Logger log = Logger.getLogger(ActionLogAspect.class); /** * 后置通知(無論方法是否發生異常都會執行,所以訪問不到方法的返回值) */ public void after(JoinPoint joinPoint)throws IOException{ WriteToLog(joinPoint); } //把信息寫進日志里面 public void WriteToLog(JoinPoint joinPoint)throws IOException { HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder. getRequestAttributes()).getRequest(); //獲取方法名 String cla=joinPoint.getTarget().getClass().getName();//action String method=joinPoint.getSignature().getName();//method //獲取操作人 HttpSession session = request.getSession(); Manager manager = (Manager) session.getAttribute("SESSION_MANAGER"); Integer userid=null; String username=""; if(manager!=null){ userid = manager.getId(); username =manager.getUsername(); } StringBuffer json=new StringBuffer();//獲取請求參數 Enumeration<String> names = request.getParameterNames(); while(names.hasMoreElements()){ //獲取每一個文本域的name String name = names.nextElement(); String [] values = request.getParameterValues(name); if(values!=null && values.length>0){ //輸出參數名和參數值 json.append(name+":{"); for(String val:values){ json.append(val+","); } if (','==json.charAt(json.length()-1)) json.deleteCharAt(json.length()-1); json.append("},"); } } if (json!=null && json.length()>0 && ','==json.charAt(json.length()-1)) json.deleteCharAt(json.length()-1); log.debug("{method:{"+cla+"."+method+"}, params:{"+json.toString()+"},user:{id:"+userid+",username:"+username+"}}"); } }
獲取對應的方法名,類名,以及從session中獲取當前用戶就可以了