spring aop管理日志

xuzhenghang 2010-01-14 06:24:20
求spring aop日志管理的源码,主要是能在spring aop里面能取得用户信息,自己做了一个老出错,困扰了好久了,发帖也没人帮助解决,所以只能厚着脸皮要了,本人是学生,没有用于商业用途,哪位朋友能给我一份吗?
...全文
2516 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwxxxxqqqq 2012-10-07
  • 打赏
  • 举报
回复
现在搞好了 没啊 我跟你一样的问题 解决的话 教教我吧
xycshh 2010-01-18
  • 打赏
  • 举报
回复
你的方法和spring security很类似,建议可以去看源码,我这边有分自己做的,不过功能很简单,可以给你
2到20个英文 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xuzhenghang 的回复:]
引用 18 楼 hedangqing 的回复:
你finnaly里面不是清空了吗

所以只有第一次拦截方法会有信息,

在第二次进入拦截方法时,就没有

把finnaly删了吧


看是这个意思不


你测试过了吗?
清空的是当前线程,这个必需要清空,因为每启动一个请求都是新的线程,而容器的管理机制是启用哪些没有在使用的线程,如果不清空,就会暴露原来的信息 和这个没关系
[/Quote]

不好意思 呼
没看清楚,以为是一个Servlet,没看到是过滤器
这样是有必要清
代码没测试,等下有时间测试下,
xuzhenghang 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 hedangqing 的回复:]
你finnaly里面不是清空了吗

所以只有第一次拦截方法会有信息,

在第二次进入拦截方法时,就没有

把finnaly删了吧


看是这个意思不

[/Quote]
你测试过了吗?
清空的是当前线程,这个必需要清空,因为每启动一个请求都是新的线程,而容器的管理机制是启用哪些没有在使用的线程,如果不清空,就会暴露原来的信息 和这个没关系
2到20个英文 2010-01-15
  • 打赏
  • 举报
回复
你finnaly里面不是清空了吗

所以只有第一次拦截方法会有信息,

在第二次进入拦截方法时,就没有

把finnaly删了吧


看是这个意思不
benpigyo 2010-01-15
  • 打赏
  • 举报
回复
不是很明白
colin_pxx 2010-01-15
  • 打赏
  • 举报
回复
我路过就看看
xuzhenghang 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hedangqing 的回复:]
你是不是写了一个aop

在里面拿不到session 的用户信息

是这样吗

如果是,那么传过去,用aop 拦就可以了吗


不传得不到滴哦
[/Quote]
我的配置很简单:
<aop:aspectj-autoproxy/>
<bean id="logbean" class="com.shop.spring.LogAOP"/>
在AOP里面有用到注解,应该是没有问题的,还缺什么吗
  • 打赏
  • 举报
回复
log.debug("processUser() start, user: {}" + user);

改为:

log.debug("processUser() start, user: {}", user);
  • 打赏
  • 举报
回复
对于 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."); // 这个日志没有丝毫用处,可以删除
}


以上的 User 必须实现 toString() 方法,其中应包自身全部或者主要的字段名和字段值。
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jaguar_yang 的回复:]
引用 13 楼 bao110908 的回复:
日志还想要 AOP????


拦截动作的aop日志是非常经典的应用,4星上将。
[/Quote]

如果在方法的开始和结束整个日志,那方法中呢?如果方法中没有日志的话,那就完全失去了日志的意义!

另外,所有介绍 AOP 的地方都以日志作为示例,其实这是一个很牵强的示例,没有人会只在方法的开始和结束,或者是异常三处整个日志。

日志在应用程序中是非常非常重要的,好的日志信息能有助于我们在程序出现 BUG 时能快速进行定位,并能找出其中的原因,但是很多的开发人员很不重视日志。

我发觉很多很多的开发人员不会使用日志,其所称的日志一般都是这样的:

public User processUser(User user) {    
log.debug("processUser() start...");
try {
processUser 代码
} catch (Exception e) {
log.error("processUser() failed.", e);
}
log.debug("processUser() end.");
}


这样的日志写了跟没写一样,没有丝毫的用处!
jaguar_yang 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bao110908 的回复:]
日志还想要 AOP????
[/Quote]

拦截动作的aop日志是非常经典的应用,4星上将。
  • 打赏
  • 举报
回复
日志还想要 AOP????
xuzhenghang 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hedangqing 的回复:]
运行以后老是除了第一次登录操作老是报取空值操作???

除了第一次操作可以,后面都报空操作吗?

[/Quote]
是啊!是什么原因 怎么解决,帮帮忙啊!
2到20个英文 2010-01-14
  • 打赏
  • 举报
回复
运行以后老是除了第一次登录操作老是报取空值操作???

除了第一次操作可以,后面都报空操作吗?
xiaofang_117 2010-01-14
  • 打赏
  • 举报
回复
http://book.csdn.net/bookfiles/250/10025011349.shtml

这里面应该可以找到你要的答案 去看看吧
xuzhenghang 2010-01-14
  • 打赏
  • 举报
回复
之前的帖子在这里http://topic.csdn.net/u/20100109/12/84806d39-0a1c-4dbe-ad66-61f44dd9aa0a.html
2到20个英文 2010-01-14
  • 打赏
  • 举报
回复
你是不是写了一个aop

在里面拿不到session 的用户信息

是这样吗

如果是,那么传过去,用aop 拦就可以了吗


不传得不到滴哦
wenjjing2lianee 2010-01-14
  • 打赏
  • 举报
回复
不是很了解,那个错误贴在哪?想看看...
加载更多回复(5)

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧