能否在进入某个类的时候
比如我 类A 方法m
我调用方法m的时候 是否能提取到方法名称以及是哪个类的
比如我 类A 方法m
我调用方法m的时候 是否能提取到方法名称以及是哪个类的
解决方案 »
- 两个数据库数据同步,出现java heap space 栈内存溢出
- spring3最新最全的免费PPT下载,共享给大家学习用
- eXtremeComponents导出Excel的问题!
- 现在有些迷茫了??请高手点拨!!!
- jboss下,war访问ejb,总是报javax.naming.NameNotFoundException: ejb not bound
- 有没人会用xfire做web service服务的?
- 写了一个SpringMvc的例子,有兴趣的可以去看看。
- 我们这还是四个校区的,蛮复杂的,现在一个校区的我都作不起来,郁闷,轻大侠襄助,另外给分!
- 大家帮看看jbuilder2005设置jndi的奇怪问题
- 删除xml中的某一个节点的问题
- getcurrentSession和openSession的问题
- java应用中如何中一个密钥,设置有效期,到期之后使java程序无法启动,就是为用户提供试用期?
通过使用joinPort就可以取得相应的信息。
<bean id="logInterceptor"
class="com.sshframework.generic.aop.interceptor.EventLogInterceptor">
<property name="systemLogService" ref="systemLogService" />
</bean>
<aop:config>
<aop:aspect id="logAspect" ref="logInterceptor">
<aop:before method="before" pointcut-ref="txPointcut" />
<aop:after-returning method="afterReturning"
pointcut-ref="txPointcut" />
<aop:after-throwing method="afterThrowing"
pointcut-ref="txPointcut" throwing="ex" />
</aop:aspect>
</aop:config>定义好拦截器 然后实现相应的触发类
@AfterThrowing(value = "execution ( * com.devtek.service.impl.*.*(..) )", pointcut = "execution ( * com.devtek.service.impl.*.*(..) )")
public void afterThrowing(JoinPoint jp) throws Throwable {
System.out.println("日志记录开始,访问的方法为"
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName() + "(),产生异常");
}
<bean id="logInterceptor"
class="com.sshframework.generic.aop.interceptor.EventLogInterceptor">
<property name="systemLogService" ref="systemLogService" />
</bean>
<aop:config>
<aop:aspect id="logAspect" ref="logInterceptor">
<aop:before method="before" pointcut-ref="txPointcut" />
<aop:after-returning method="afterReturning"
pointcut-ref="txPointcut" />
<aop:after-throwing method="afterThrowing"
pointcut-ref="txPointcut" throwing="ex" />
</aop:aspect>
</aop:config>
log.debug("processUser() start...");
try {
processUser 代码
} catch (Exception e) {
log.error("processUser() failed.", e);
}
log.debug("processUser() end.");
}这样的日志写了跟没写一样,没有丝毫的用处!日志最常用的级别在 log4j 中有 DEBUG、INFO、WARN、ERROR 四种,在 JDK log 中最常用的有 FINE、INFO、WARNING、SEVERE。什么时候应用什么级别的日志是很有讲究的。我曾看到有人的代码中的日志级别全部都是一样的 DEBUG 或者是 INFO,而且清一色地在 catch 块中都是 ERROR。对于 DEBUG 级别的日志来说,是越多越好,越详细越好。另外建议使用 slf4j 日志框架,其中的 log4j 的适配器。slf4j 可以使用可变参数,我们不需要在代码中出现:if(log.isDebugEnabled()) {
log.debug("user: " + user);
}上面这样的代码。因为 log.debug 中涉及字符串连接操作,大家都知道字符串是不可变对象,内部会使用 StringBuffer 或者 StringBuilder 进行处是的。如果我们把日志调高到 INFO 的话,那些 log.debug 方法参数同样会被运算出来,但是这种运算是毫无意义的,因此我们会在外面加上:if(log.isDebugEnabled()) 这个判断。如果使用变参,由于不涉及字符串连接操作,因此就不需要这样的判断。public User processUser(User user) {
log.debug("processUser() start, user: {}", user);
try {
processUser 代码 // 这里应加入大量的 log.debug 日志
log.info("......"); // 处理完后的结果应使用 INFO 级别,内容应为处理后的 User 对象的数据
} catch (Exception e) {
log.error("processUser() failed.", e); // 异常时应使用 WARN 以上的级别,如果还有其他的方法调用上下文信息应一起写入日志
}
log.debug("processUser() end."); // 这个日志没有丝毫用处,可以删除
}一个好的日志,能在出现错误之后,能快速地进行错误定位,以及分析是由什么原因造成的,进而修改 BUG 避免在今后的代码是出现类似的错误。日志在应用程序中的地位是很重要的,希望大家都能正视和重视!