spring aop管理日志


求spring aop日志管理的源碼,主要是能在spring aop里面能取得用戶信息,自己做了一個老出錯,困擾了好久了,發帖也沒人幫助解決,所以只能厚着臉皮要了,本人是學生,沒有用於商業用途,哪位朋友能給我一份嗎?

25 个解决方案

#1


友情支持。。。

#2


JoinPoint當作參數傳入切面的方法應該可以拿到..

#3


我是用filter threadlocal取得session 如何在aop里面取 可是老報空,發帖了也沒人知道原因,自己又沒辦法測試,電腦配置太低,所以有做過的朋友 能發份給我嗎?郵箱:xuzhenghang@163.com 

#4


把用戶信息傳過去可以嗎


#5


引用 4 樓 hedangqing 的回復:
把用戶信息傳過去可以嗎

什么意思?

#6


不是很了解,那個錯誤貼在哪?想看看...

#7


你是不是寫了一個aop 

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

是這樣嗎

如果是,那么傳過去,用aop 攔就可以了嗎


不傳得不到滴哦

#9


之前的帖子在這里http://topic.csdn.net/u/20100109/12/84806d39-0a1c-4dbe-ad66-61f44dd9aa0a.html

#10


http://book.csdn.net/bookfiles/250/10025011349.shtml

這里面應該可以找到你要的答案  去看看吧

#11


運行以后老是除了第一次登錄操作老是報取空值操作???

除了第一次操作可以,后面都報空操作嗎?

#12


引用 11 樓 hedangqing 的回復:
運行以后老是除了第一次登錄操作老是報取空值操作???

 除了第一次操作可以,后面都報空操作嗎?

是啊!是什么原因 怎么解決,幫幫忙啊!

#13


日志還想要 AOP????

#14


引用 13 樓 bao110908 的回復:
日志還想要 AOP????


攔截動作的aop日志是非常經典的應用,4星上將。

#15


引用 7 樓 hedangqing 的回復:
你是不是寫了一個aop

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

 是這樣嗎

 如果是,那么傳過去,用aop 攔就可以了嗎


 不傳得不到滴哦

我的配置很簡單:
<aop:aspectj-autoproxy/>
<bean id="logbean" class="com.shop.spring.LogAOP"/>
在AOP里面有用到注解,應該是沒有問題的,還缺什么嗎

#16


我路過就看看

#17


不是很明白

#18


你finnaly里面不是清空了嗎

所以只有第一次攔截方法會有信息,

在第二次進入攔截方法時,就沒有

把finnaly刪了吧


看是這個意思不

#19


引用 18 樓 hedangqing 的回復:
你finnaly里面不是清空了嗎

 所以只有第一次攔截方法會有信息,

 在第二次進入攔截方法時,就沒有

 把finnaly刪了吧


 看是這個意思不

你測試過了嗎?
清空的是當前線程,這個必需要清空,因為每啟動一個請求都是新的線程,而容器的管理機制是啟用哪些沒有在使用的線程,如果不清空,就會暴露原來的信息 和這個沒關系

#20


引用 19 樓 xuzhenghang 的回復:
引用 18 樓 hedangqing 的回復:
 你finnaly里面不是清空了嗎

  所以只有第一次攔截方法會有信息,

  在第二次進入攔截方法時,就沒有

  把finnaly刪了吧


  看是這個意思不


 你測試過了嗎?
 清空的是當前線程,這個必需要清空,因為每啟動一個請求都是新的線程,而容器的管理機制是啟用哪些沒有在使用的線程,如果不清空,就會暴露原來的信息 和這個沒關系


不好意思 呼
沒看清楚,以為是一個Servlet,沒看到是過濾器
這樣是有必要清
代碼沒測試,等下有時間測試下,

#21


引用 14 樓 jaguar_yang 的回復:
引用 13 樓 bao110908 的回復:
 日志還想要 AOP????


 攔截動作的aop日志是非常經典的應用,4星上將。


如果在方法的開始和結束整個日志,那方法中呢?如果方法中沒有日志的話,那就完全失去了日志的意義!

另外,所有介紹 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.");
}


這樣的日志寫了跟沒寫一樣,沒有絲毫的用處!

#22


對於 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() 方法,其中應包自身全部或者主要的字段名和字段值。

#23


log.debug("processUser() start, user: {}" + user);

改為:

log.debug("processUser() start, user: {}" user);

#24


你的方法和spring security很類似,建議可以去看源碼,我這邊有分自己做的,不過功能很簡單,可以給你

#25


現在搞好了 沒啊 我跟你一樣的問題 解決的話 教教我吧

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com