SpringMvc 自定义日志拦截器打jar包
可以实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter,里面有三个方法preHandle、postHandle、afterCompletion。
拦截器例子:
public class ExLogInterceptor implements HandlerInterceptor {
private final Logger logger = LoggerFactory.getLogger(ExLogInterceptor.class);
//session_key,用逗号分隔开
private String session_key;
//默认false
//开启进入方法打印Attribute
private String needEnterAttr;
//开启进入方法打印Parameter
private String needEnterParam;
//开启退出方法打印Attribute
private String needExitAttr;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
try{
if(handler instanceof HandlerMethod){
ExLog Log=new ExLog();
Map<String,Object> sessionObjects=new HashMap<String,Object>();
if(!StringUtils.isEmpty(getSession_key())){
//使用逗号分隔
String[] session_keys=getSession_key().replaceAll(",", ",").split(",");
for(String session_key:session_keys){
Object object=request.getSession().getAttribute(session_key);
sessionObjects.put(session_key, object==null?"":object);
}
Log.setSessionObjects(sessionObjects);
//通过threadLocal保存当前登录用户
ExLogUtil.setThreadLocalLog(Log);
}
HandlerMethod method=(HandlerMethod)handler;
//获取当前方法所在的当前类
Class<?> clazz=method.getMethod().getDeclaringClass();
//请求的类名
String clazzName=clazz.getName();
//请求的方法名
String methodName=method.getMethod().getName();
if(null!=getNeedEnterAttr()&&"true".equals(getNeedEnterAttr())){
//遍历请求中Attribute
Enumeration attrNames= request.getAttributeNames();
while(attrNames.hasMoreElements()){
String name=(String) attrNames.nextElement();
Object Attrobject=request.getAttribute(name);
logger.info("开始访问:controller:"+clazzName+",controllerMethod:"+methodName+",Attrname:"+name+"value:"+Attrobject.toString());
}
}
if(null!=getNeedEnterParam()&&"true".equals(getNeedEnterParam())){
//遍历请求中param
Map<String, Object> paramMap=request.getParameterMap();
for(Entry<String, Object> entry:paramMap.entrySet()){
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue().toString());
logger.info("开始访问:controller:"+clazzName+",controllerMethod:"+methodName+",Param:key:"+entry.getKey()+",value:"+entry.getValue().toString());
}
}
logger.info("开始访问:controller:"+clazzName+",controllerMethod:"+methodName+",sessionKV:"+ExLogUtil.getThreadLocalLog().toString());
return true;
}
}catch (Exception e){
e.printStackTrace();
}
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
try{
if(handler instanceof HandlerMethod){
HandlerMethod method=(HandlerMethod)handler;
Class<?> clazz=method.getMethod().getDeclaringClass();
String clazzName=clazz.getName();
String methodName=method.getMethod().getName();
logger.info("访问:controller:"+clazzName+",controllerMethod:"+methodName+",sessionKV:"+ExLogUtil.getThreadLocalLog().toString());
}
}catch (Exception e){
e.printStackTrace();
}
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
try{
if(handler instanceof HandlerMethod){
HandlerMethod method=(HandlerMethod)handler;
Class<?> clazz=method.getMethod().getDeclaringClass();
String clazzName=clazz.getName();
String methodName=method.getMethod().getName();
if(null!=getNeedExitAttr()&&"true".equals(getNeedExitAttr())){
//遍历离开方法set如的Attribute
Enumeration attrNames= request.getAttributeNames();
while(attrNames.hasMoreElements()){
String name=(String) attrNames.nextElement();
Object Attrobject=request.getAttribute(name);
logger.info("访问结束:controller:"+clazzName+",controllerMethod:"+methodName+",Attrname:"+name+"value:"+Attrobject.toString());
}
}
logger.info("访问结束:controller:"+clazzName+",controllerMethod:"+methodName+",sessionKV:"+ExLogUtil.getThreadLocalLog().toString());
ExLogUtil.remove();
}
}catch (Exception e){
e.printStackTrace();
}
}
public String getSession_key() {
return session_key;
}
public void setSession_key(String session_key) {
this.session_key = session_key;
}
public Logger getLogger() {
return logger;
}
public String getNeedEnterAttr() {
return needEnterAttr;
}
public void setNeedEnterAttr(String needEnterAttr) {
this.needEnterAttr = needEnterAttr;
}
public String getNeedEnterParam() {
return needEnterParam;
}
public void setNeedEnterParam(String needEnterParam) {
this.needEnterParam = needEnterParam;
}
public String getNeedExitAttr() {
return needExitAttr;
}
public void setNeedExitAttr(String needExitAttr) {
this.needExitAttr = needExitAttr;
}
}
日志类
public class ExLog {
//sessionObject
private Map<String,Object> sessionObjects;
public Map<String, Object> getSessionObjects() {
return sessionObjects;
}
public void setSessionObjects(Map<String, Object> sessionObjects) {
this.sessionObjects = sessionObjects;
}
@Override
public String toString() {
StringBuffer stringBuffer=new StringBuffer("Log[SessionObjects=");
if(null!=sessionObjects){
for (Map.Entry<String,Object> entry:sessionObjects.entrySet()){
stringBuffer.append("{");
stringBuffer.append(entry.getKey());
stringBuffer.append(":");
stringBuffer.append(entry.getValue());
stringBuffer.append("}");
}
}
stringBuffer.append("]");
return stringBuffer.toString();
}
}
工具类
public class ExLogUtil {
private static final ThreadLocal<ExLog> THREAD_LOCAL=new InheritableThreadLocal<ExLog>();
public static ExLog getThreadLocalLog(){
if(THREAD_LOCAL.get()==null){
return new ExLog();
}else{
return THREAD_LOCAL.get();
}
}
public static void setThreadLocalLog(ExLog log){
THREAD_LOCAL.set(log);
}
public static void remove(){
THREAD_LOCAL.remove();
}
}
代码打包,引入springmvc的包,把当前代码打jar包(除去依赖包),然后就可以把jar包放到自己需要用到的项目中去
不会打包的请前往(idea版):https://blog.youkuaiyun.com/sdfiiiiii/article/details/80756162
在springmvc.xml中配置
<mvc:interceptors>
<mvc:interceptor>
<!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
<mvc:mapping path="/**" />
<!-- 拦截器类 -->
<!-- <bean class="com.grgbanking.framework.interceptor.ExLogInterceptor"></bean> -->
<bean class="com.ex.interceptor.ExLogInterceptor">
<property name="session_key" value="SESSION_KEY_USER"></property>
<property name="needEnterParam" value="true"></property>
<property name="needEnterAttr" value="true"></property>
<property name="needExitAttr" value="true"></property>
</bean>
</mvc:interceptor>
<!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>
日志结果(日志格式可以按照自己需求直接改源码即可)
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.FLASH_MAP_MANAGERvalue:org.springframework.web.servlet.support.SessionFlashMapManager@24911577
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:encodingFilter.FILTEREDvalue:true
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.THEME_SOURCEvalue:WebApplicationContext for namespace 'springMvc-servlet': startup date [Fri Feb 01 10:45:59 CST 2019]; parent: Root WebApplicationContext
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVERvalue:org.springframework.web.servlet.theme.FixedThemeResolver@4bd6515d
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.CONTEXTvalue:WebApplicationContext for namespace 'springMvc-servlet': startup date [Fri Feb 01 10:45:59 CST 2019]; parent: Root WebApplicationContext
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.core.convert.ConversionServicevalue:ConversionService converters =
@org.springframework.format.annotation.DateTimeFormat java.lang.Long -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,@org.springframework.format.annotation.NumberFormat java.lang.Long -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.DateTimeFormat java.util.Calendar -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95
@org.springframework.format.annotation.DateTimeFormat java.util.Date -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95
@org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,org.joda.time.LocalDate -> java.lang.String : org.springframework.format.datetime.joda.ReadablePartialPrinter@25c86eff
@org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDateTime -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,org.joda.time.LocalDateTime -> java.lang.String : org.springframework.format.datetime.joda.ReadablePartialPrinter@69b56d25
@org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalTime -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,org.joda.time.LocalTime -> java.lang.String : org.springframework.format.datetime.joda.ReadablePartialPrinter@38f88e6e
@org.springframework.format.annotation.DateTimeFormat org.joda.time.ReadableInstant -> java.lang.String: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,org.joda.time.ReadableInstant -> java.lang.String : org.springframework.format.datetime.joda.ReadableInstantPrinter@395bbb79
@org.springframework.format.annotation.NumberFormat java.lang.Byte -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.lang.Double -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.lang.Float -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.lang.Integer -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.lang.Short -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.math.BigDecimal -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
@org.springframework.format.annotation.NumberFormat java.math.BigInteger -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.Boolean -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5ed271e0
java.lang.Character -> java.lang.Number : org.springframework.core.convert.support.CharacterToNumberFactory@26589349
java.lang.Character -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@26331c38
java.lang.Enum -> java.lang.Integer : org.springframework.core.convert.support.EnumToIntegerConverter@5abaa8f1
java.lang.Enum -> java.lang.String : org.springframework.core.convert.support.EnumToStringConverter@2fa2f59c
java.lang.Integer -> java.lang.Enum : org.springframework.core.convert.support.IntegerToEnumConverterFactory@73aaed32
java.lang.Long -> java.util.Calendar : org.springframework.format.datetime.DateFormatterRegistrar$LongToCalendarConverter@51147380
java.lang.Long -> java.util.Date : org.springframework.format.datetime.DateFormatterRegistrar$LongToDateConverter@56d55a31
java.lang.Long -> org.joda.time.ReadableInstant : org.springframework.format.datetime.joda.JodaTimeConverters$LongToReadableInstantConverter@52f99715
java.lang.Number -> java.lang.Character : org.springframework.core.convert.support.NumberToCharacterConverter@6581b41f
java.lang.Number -> java.lang.Number : org.springframework.core.convert.support.NumberToNumberConverterFactory@6377d790
java.lang.Number -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@a1e03ac
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.lang.Long: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Long: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.util.Calendar: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.util.Date: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,java.lang.String -> org.joda.time.LocalDate: org.springframework.format.datetime.joda.LocalDateParser@9ef3aba
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDateTime: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,java.lang.String -> org.joda.time.LocalDateTime: org.springframework.format.datetime.joda.LocalDateTimeParser@610ce5b
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalTime: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,java.lang.String -> org.joda.time.LocalTime: org.springframework.format.datetime.joda.LocalTimeParser@464ef4fa
java.lang.String -> @org.springframework.format.annotation.DateTimeFormat org.joda.time.ReadableInstant: org.springframework.format.datetime.joda.JodaDateTimeFormatAnnotationFormatterFactory@15bf0d95,java.lang.String -> org.joda.time.ReadableInstant: org.springframework.format.datetime.joda.DateTimeParser@3571225a
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Byte: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Double: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Float: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Integer: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Short: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.math.BigDecimal: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> @org.springframework.format.annotation.NumberFormat java.math.BigInteger: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@507c60eb
java.lang.String -> java.lang.Boolean : org.springframework.core.convert.support.StringToBooleanConverter@12db14a
java.lang.String -> java.lang.Character : org.springframework.core.convert.support.StringToCharacterConverter@38831664
java.lang.String -> java.lang.Enum : org.springframework.core.convert.support.StringToEnumConverterFactory@4a3259c2
java.lang.String -> java.lang.Number : org.springframework.core.convert.support.StringToNumberConverterFactory@50e961f4
java.lang.String -> java.nio.charset.Charset : org.springframework.core.convert.support.StringToCharsetConverter@3a905060
java.lang.String -> java.util.Currency : org.springframework.core.convert.support.StringToCurrencyConverter@c0578aa
java.lang.String -> java.util.Locale : org.springframework.core.convert.support.StringToLocaleConverter@14a994c0
java.lang.String -> java.util.Properties : org.springframework.core.convert.support.StringToPropertiesConverter@e2de9ce
java.lang.String -> java.util.UUID : org.springframework.core.convert.support.StringToUUIDConverter@14433f72
java.lang.String -> org.joda.time.Duration: org.springframework.format.datetime.joda.DurationFormatter@4f8d50c6
java.lang.String -> org.joda.time.MonthDay: org.springframework.format.datetime.joda.MonthDayFormatter@5850b563
java.lang.String -> org.joda.time.Period: org.springframework.format.datetime.joda.PeriodFormatter@16865e1f
java.lang.String -> org.joda.time.YearMonth: org.springframework.format.datetime.joda.YearMonthFormatter@46b21ff7
java.nio.charset.Charset -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@588ceca9
java.util.Calendar -> java.lang.Long : org.springframework.format.datetime.DateFormatterRegistrar$CalendarToLongConverter@6c4d8ad3
java.util.Calendar -> java.util.Date : org.springframework.format.datetime.DateFormatterRegistrar$CalendarToDateConverter@72041dff
java.util.Calendar -> org.joda.time.ReadableInstant : org.springframework.format.datetime.joda.JodaTimeConverters$CalendarToReadableInstantConverter@54d0b863
java.util.Currency -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@3b34e710
java.util.Date -> java.lang.Long : org.springframework.format.datetime.DateFormatterRegistrar$DateToLongConverter@3214bc5a
java.util.Date -> java.util.Calendar : org.springframework.format.datetime.DateFormatterRegistrar$DateToCalendarConverter@6f59d265
java.util.Date -> org.joda.time.ReadableInstant : org.springframework.format.datetime.joda.JodaTimeConverters$DateToReadableInstantConverter@7ebda5ce
java.util.Locale -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@964d3d9
java.util.Properties -> java.lang.String : org.springframework.core.convert.support.PropertiesToStringConverter@6850daa7
java.util.UUID -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@4afa5fc2
org.joda.time.DateTime -> java.lang.Long : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToLongConverter@532282dd
org.joda.time.DateTime -> java.util.Calendar : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToCalendarConverter@32e4eb85
org.joda.time.DateTime -> java.util.Date : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToDateConverter@6a2eeb2
org.joda.time.DateTime -> org.joda.time.DateMidnight : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToDateMidnightConverter@1174e5f6
org.joda.time.DateTime -> org.joda.time.Instant : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToInstantConverter@9160ccf
org.joda.time.DateTime -> org.joda.time.LocalDate : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToLocalDateConverter@15ab0216
org.joda.time.DateTime -> org.joda.time.LocalDateTime : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToLocalDateTimeConverter@45b396da
org.joda.time.DateTime -> org.joda.time.LocalTime : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToLocalTimeConverter@e15fd77
org.joda.time.DateTime -> org.joda.time.MutableDateTime : org.springframework.format.datetime.joda.JodaTimeConverters$DateTimeToMutableDateTimeConverter@11a5826e
org.joda.time.Duration -> java.lang.String : org.springframework.format.datetime.joda.DurationFormatter@4f8d50c6
org.joda.time.LocalDateTime -> org.joda.time.LocalDate : org.springframework.format.datetime.joda.JodaTimeConverters$LocalDateTimeToLocalDateConverter@2e0e42
org.joda.time.LocalDateTime -> org.joda.time.LocalTime : org.springframework.format.datetime.joda.JodaTimeConverters$LocalDateTimeToLocalTimeConverter@4faa0f25
org.joda.time.MonthDay -> java.lang.String : org.springframework.format.datetime.joda.MonthDayFormatter@5850b563
org.joda.time.Period -> java.lang.String : org.springframework.format.datetime.joda.PeriodFormatter@16865e1f
org.joda.time.YearMonth -> java.lang.String : org.springframework.format.datetime.joda.YearMonthFormatter@46b21ff7
org.springframework.core.convert.support.ArrayToArrayConverter@32e6e278
org.springframework.core.convert.support.ArrayToCollectionConverter@7ba4e002
org.springframework.core.convert.support.ArrayToObjectConverter@3939369c
org.springframework.core.convert.support.ArrayToStringConverter@501ccc66
org.springframework.core.convert.support.ByteBufferConverter@5163164f
org.springframework.core.convert.support.ByteBufferConverter@5163164f
org.springframework.core.convert.support.ByteBufferConverter@5163164f
org.springframework.core.convert.support.ByteBufferConverter@5163164f
org.springframework.core.convert.support.CollectionToArrayConverter@56ee2b9
org.springframework.core.convert.support.CollectionToCollectionConverter@541e4e63
org.springframework.core.convert.support.CollectionToObjectConverter@207d22ae
org.springframework.core.convert.support.CollectionToStringConverter@432aadb0
org.springframework.core.convert.support.FallbackObjectToStringConverter@5ff31743
org.springframework.core.convert.support.IdToEntityConverter@404dc647,org.springframework.core.convert.support.ObjectToObjectConverter@3214804c
org.springframework.core.convert.support.MapToMapConverter@11ac70ba
org.springframework.core.convert.support.ObjectToArrayConverter@5b30591d
org.springframework.core.convert.support.ObjectToCollectionConverter@776fde2b
org.springframework.core.convert.support.StringToArrayConverter@12af65a1
org.springframework.core.convert.support.StringToCollectionConverter@26f12043
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMappingvalue:/user/login.do
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.context.request.async.WebAsyncManager.WEB_ASYNC_MANAGERvalue:org.springframework.web.context.request.async.WebAsyncManager@5de9e398
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.OUTPUT_FLASH_MAPvalue:FlashMap [attributes={}, targetRequestPath=null, targetRequestParams={}]
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.HandlerMapping.uriTemplateVariablesvalue:{}
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.HandlerMapping.bestMatchingPatternvalue:/user/login.*
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.context.request.RequestContextListener.REQUEST_ATTRIBUTESvalue:org.apache.catalina.connector.Request@a30d498
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,Attrname:org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVERvalue:org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@22c8879b
2019-02-01 10:47:23 INFO - 开始访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,user:Log [SessionObject=UserBean [userId=2345678, userNm=测试用户, job=null, mobile=13600000004, sex=null, email=null, wxId=null, wxNickname=测试用户, avatarMediaId=null, avatar=null, userSt=0, extattr=null, vld_f=null, crtTm=null, lastUdtTm=2018-04-17 09:18:45.0, upldUserId=39194, ehrOrgId=B3578, smcOrgNo=206, oldPassword=null, newPassword=null, confirmPassword=null]]
2019-02-01 10:47:23 INFO - BaseController:/wcboc/user/login.do
2019-02-01 10:47:23 INFO - 访问:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,user:Log [SessionObject=UserBean [userId=2345678, userNm=测试用户, job=null, mobile=13600000004, sex=null, email=null, wxId=null, wxNickname=测试用户, avatarMediaId=null, avatar=null, userSt=0, extattr=null, vld_f=null, crtTm=null, lastUdtTm=2018-04-17 09:18:45.0, upldUserId=39194, ehrOrgId=B3578, smcOrgNo=206, oldPassword=null, newPassword=null, confirmPassword=null]]
2019-02-01 10:47:23 INFO - 访问结束:controller:com.grgbanking.framework.system.user.controller.UserController,controllerMethod:login,user:Log [SessionObject=UserBean [userId=2345678, userNm=测试用户, job=null, mobile=13600000004, sex=null, email=null, wxId=null, wxNickname=测试用户, avatarMediaId=null, avatar=null, userSt=0, extattr=null, vld_f=null, crtTm=null, lastUdtTm=2018-04-17 09:18:45.0, upldUserId=39194, ehrOrgId=B3578, smcOrgNo=206, oldPassword=null, newPassword=null, confirmPassword=null]]