畢業設計(論文)-日志跟蹤分析平臺的設計與實現_第1頁
畢業設計(論文)-日志跟蹤分析平臺的設計與實現_第2頁
畢業設計(論文)-日志跟蹤分析平臺的設計與實現_第3頁
畢業設計(論文)-日志跟蹤分析平臺的設計與實現_第4頁
畢業設計(論文)-日志跟蹤分析平臺的設計與實現_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、畢業設計說明書日志跟蹤分析平臺的設計與實現學院:理學院專業:信息與計算科學學生姓名:學 號:指導教師:2012年6月摘要隨著時代的發展,在現代信息系統中,如何方便快捷地記錄系統日志等問 題變得越來越突岀。因此就需要一個完善的日志記錄查詢系統來實現對這些數 據的有效管理。在互聯網越來越普及的今天,信息在人們的日常生活中占據了非常重要的 地位,日志系統是基丁 java, mysql和log4j的一種在internet上公開發布的, 是一個方便的供廣大互聯網用戶相互交流的平臺。它可以是單用戶的,也可以 是多用戶的,本文主耍研究單用戶系統,主要包括前臺瀏覽、評論日志功能等 功能。其開發主要包括后臺數據

2、庫的建立和維護以及前端的應用程序的開發兩 個方面。對于前者要求建立數據的一致性和完整性,對于后者則要求應用程序 功能的完備、易用等特點。基于上述考慮本系統主要利用eclipse作前端的應用開發工具,利用mysql 作為后臺數據庫,充分利用了 eclipse和mysql的優點,使系統更加完善。 關鍵詞:log4j fl志系統,java, mysql數據庫,b/sabstractwith the development of modern information systems, how to quickly and easily record system log has become incr

3、easingly prominent. hence the need for a comprehensive logging query system to achieve effective management of these data.information in the daily lives of people in the internet is becoming increasingly popular today, occupy a very important position, the log system is based on java, mysql and a lo

4、g4j publicly available on the internet is a convenient for the majority of internet exchange platform. it can be a single-user, can also be a single-user system for multi-user, this study, including the foreground browsing, review the log function. its development including the establishment and mai

5、ntenance, and front-end application development two aspects of the back-end database. the former requires the establishment of data consistency and integrity, for the latter requires a complete application functionality, ease of use features.based on the above considerations of the system to use ecl

6、ipse for front-end application development tools, the use of mysql as a back-end database, and make full use of the advantages of eclipse and mysql, to make the system more comprehensive.key words: iog4j, java, mysql, b/s目錄摘要iabstract (英文摘要)ii目錄iii第一章引言1系統開發的背景12系統開發的目的和意義1第二章系統規劃32. 1系統任務32. 2系統目標3

7、2. 3系統計劃32. 4可行性分析32.4.1系統技術可行性32.4.2系統經濟可行性42.4.3系統管理可行性42.4.4系統操作可行性4第三章系統分析53.1系統的需求分析53. 2系統模塊設計及描述53. 2.1用戶賬號模塊的功能分析53. 2.2日志記錄模塊的功能分析63. 3數據表纟吉構63. 4系統功能結構設計6第四章系統測試與維護244. 1系統測試24-in-4. 2系統維護25第五章設計總結26參考文獻27致謝28第一章引言1.1系統開發的背景log4j是apache的一個開放源代碼項目,通過使用log4j,我們可以控制h 志信息輸送的目的地是控制臺、文件、gui組件、甚至

8、是套接口服務器、nt 的事件記錄器、unixsyslog守護進程等;我們也可以控制每一條h志的輸出格 式;通過定義每一條h志信息的級別,我們能夠更加細致地控制日志的生成過 程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而 不需要修改應用的代碼。1.2系統開發的目的和意義日志指在程序中插入語句以提供調試信息。使用日志能夠監視程序的執行。 例如,用戶利用日志可以獲得關于應用程序故障的完整信息。用戶可以將調試 語句(如system.out.println)插入到程序中以獲得詳細的調試信息。項目中為什 么要用log4j大家在編程時經常不可避免地要使用到一些fl志操作,比如開發階 段

9、的調試信息、運行時的fi志記錄及審計。調查顯示,h志代碼占代碼總量的 4% o通常大家可以簡單地使用system.out.println()語句輸出fl志信息,但是往往 會有一些判斷,比如:這些判斷造成止常的程序邏輯中混雜了大量的輸出語句。 而在開發階段寫下的這些判斷僅為了調試的語句,在開發完成時需要查找并移 除。部署運行后,尤其是在一些企業應用系統中,述經常需要進一步調試,這 時就遇到了更大的麻煩。所以,我們需要一套完備的、靈活的、可配置的日志 工具log4j就是優秀的選擇。log4j組件log4j由logger> appender和layout三個組件組成。可以通過 同名的java類

10、訪問log4j的這三個組件。logger -在執行應用程序時,接收 h志語句生成的fi志請求。它是一種重要的h志處理組件,可以通過log4j api 的logger類對其進行訪問。它的方法有:debug> info、warn> error> fatal和log。 這些方法用于記錄消息,appender管理fl志語句的輸岀結果。執行h志語句時, logger對象將接收來自fl志語句的記錄請求。此請求是通過logger發送至 appender的。然后,appender將輸出結果寫入到用戶選擇的目的地。對于不同 的日志目的地,提供不同的appender類型。這些appender包括

11、:用丁文件的 file appender用于數據庫的jdbc appender和用于smtp服 務器的smtp appendero layout用丁指定appender將日志語句寫入日志目的地所采用的格 式。appender可以用來格式化輸出結果的各種布局 包括:簡單布局、模式布局 和html布局。log4j中有三個主要的組件,它們分別是logger、appender 和layout, log4j允許開發人員定義多個logger,每個logger擁有自己的名字, logger之間通過名字來表明隸展關系。有一個logger稱為root,它永遠 存在, 且不能通過名字檢索或引用,可以通過logge

12、r.getrootlogger()法獲得,其它 logger 通過 logger.getlogger(string name)方v去。appender則是用來指明將所有的log信息存放到什么地方,log4j中支持多種 appender,女口 console files> gui components> nt event loggers 等,一個 logger 可以擁有多個appender,也就是你嫵可以將log信息輸岀到屏幕,同時存儲到 一個文件中。layout的作用是控制log信息的輸出方式,也就是格式化輸出的信息。log4j中將要輸出的log信息定義了 5種級別,依次為debu

13、g、info、warn、 error w fatal,當輸出時,只有級別高過配置中規定的級別的信息才能真 止的輸出,這樣就很方便的來配置不同情況下耍輸出的內容,而不需要更改代 碼,這點實在是方便啊。在應用程序中添加h志記錄總的來說基于三個目的: 監視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統計分析 工作;跟蹤代碼運行時軌跡,作為日后審計的依據;擔當集成開發環境中的調 試器的作用,向文件或控制臺打印代碼的調試信息。最普通的做法就是在代碼中嵌入許多的打印語句,這些打印語句可以輸岀到 控制臺或文件中,比較好的做法就是構造一個h志操作類來封裝此類操作,而 不是讓一系列的打印語句充斥了代

14、碼的主體。第二章系統規劃2.1系統任務目前,述存在很多系統使用pi訕語句來進行日志的輸岀也檢測,或者用jdk 自帶的log來記錄日志,這很影響工作效率與校正系統錯誤。2.2系統目標log4j的特點就是簡單有效,快速,而且占用系統資源少,容易學習,適用 各種平臺跟各種數據庫的連接,方便快捷的記錄日志。本系統通過搭建一個測試系統平臺,并在其上建立日志管理系統來演示日志 的記錄與查詢的方便簡單性,從來來闡釋log4j的優點。2.3系統計劃系統開發過程計劃如下:總體分為三大階段來完成,耍求每一階段的任務 都要按質按量來完成,以便整個系統功能能夠止常運行。第一階段(3一4.10)可行性分析,系統分析。第

15、二階段(4.115.20)系統設計,平臺的搭建,fi志管理系統的低耦合融 入。第三階段(5.205.28)軟硬件的準備,建立數據庫,實現與數據庫的鏈接, 系統調試完善。2.4可行性分析2.4.1系統技術可行性技術可行性包括以下幾個方面:硬件,系統軟件,應用軟件,技術人員。 針對這四個方面可行性都是沒有問題的,本系統預采用eclipse編程環境加mysql 數據庫。目前,數據庫產品較多,每種產品都具有各自的特點和適用范圍,因 此,在選擇數據庫時,應考慮數據庫應用的特點及適用范圍,選擇最合適的。2. 4. 2系統經濟可行性h志管理工作繁瑣,借閱頻繁,包含大量的信息數據,本h志管理系統平 臺能為日志

16、管理者提供準確、有效的信息,很大程度方便了日志管理員工作。 能夠促進日志管理體系的體制改革,提高管理員的工作效率,減少錯誤的發生 及費用支出,而且降低了管理成本、加快了信息傳遞,提高了效率。這些都將 是使用日志管理系統以后所帶來的收益。因此,從效益上分析新系統的開發在 經濟上是可行的。2. 4. 3系統管理可行性系統開發想要取得成功,沒有完善的管理機制、規范的管理制度是絕對不 行的。而對于本系統來說,各項基礎數據管理規范,其本身管理的科學性、規 范性在很大程度上為系統實施創造了良好的環境,既保證了系統的基礎數據的 準確性和時效性,同時在一定程度上也提高了系統的信息輸入質量,最終保證 系統開發的

17、成功。因此,新系統的開發在管理方面上具有可行性。2. 4.4系統操作可行性該系統主要面向的用戶是普通用戶和管理員,一旦系統實施,管理員就可 以登錄系統管理查看日志,管理員可以憑借密碼修改自己的信息,查看h志信 息等操作,可以大大提高管理員辦事效率,而且該系統的操作簡單明了,在實 施時一般不會遇到什么大的阻礙。因此,圖書管理系統在操作上是完全可行的。第三章系統分析3.1系統的需求分析1. 通過查詢資料,我總結岀本系統的需求分析結果。系統應該滿足以下的 性能需求:(1) 統一處理的準確性和及時性:系統處理的準確性和及時性是系統的必 耍性能。在系統設計和開發過程中,要充分考慮系統當前和將來可能承受的

18、工 作量,使系統的處理能力和響應時間能夠滿足管理員對日志信息處理的需求。(2) 系統的易用性和易維護性:要實現這一點,就要求系統應該盡量使用 用戶方便簡便的界面,易于系統的維護。2. 系統的數據要求:(1) 數據錄入和處理的準確性和實時性。(2) 數據的一致性與完整性。(3) 數據的共享與獨立性。3. 系統整體上可以劃分為數據庫、數據訪問層和業務邏輯層。(1) 數據庫是系統最底層,存儲系統的所有數據。表信息,關系信息等。(2) 數據訪問層建立在數據庫之上,應用程序通過該層訪問數據庫。數據訪 問層一般封存數據庫的選擇、添加、更新和刪除等操作,同時述為業務邏輯層 提供訪問數據庫的函數等。該層直接與

19、數據庫相關聯,同時又為業務邏輯層服 務,關系著系統的成敗。(3) 業務邏輯層包括管理用戶,管理日志,日志信息的查詢等邏輯。3.2系統模塊設計及描述3.2.1用戶賬號模塊的功能分析其處理過程是:輸入用戶網址,然后在各個信息欄填入信息,用戶名使用界 步數據傳輸進行前臺跟后臺數據庫信息比對,如果用戶名重復,則顯示theusername is exit,如果不重復,則用戶注冊后會錄入數據庫。3. 2. 2日志記錄模塊的功能分析管理員登陸后,可以對日志進行查詢,可以對h志按照不同的方式進行查 詢,例如ip地址,時間,或者用戶名,本系統對登陸到平臺的用戶進行ip,用 戶名,所進行操作及時間等記錄了大量用戶

20、信息,錄入日志數據庫中。3.3數據表結構數據表結構設計的任務是將流程圖轉換為與所選用的dbms (date base manager system數據庫管理系統)所支持的數據模型相符的邏輯數據模型,同時 述耍進行優化,得到如下的主要關系數據庫表:(1)管理員信息表:此表主要是日志模塊信息。表結構如表3.3.1所示:表3. 31 usertable數據表字段名類型字段大小主鍵否功能描述dateid字符50是idthread字符50否進程level字符50否等級classnamelongtext50否類名messagelongtext50否訪問地址date字符50否時間username字符50否用

21、戶名ipaddr字符50否ip地址3.4系統功能結構設計本平臺h志記錄用戶所有操作,使用mysql開源軟件當數據庫,使用jdbc 與數據庫進行連接,其中user為用戶信息,log4j_message為fl志模塊信息,整 個系統h志模塊分為4部分,第一部分為filter跟log4j的mdc,第二部分為dao 類,第三部分為jsp顯示頁面第四部分就是web.xml跟perties的配置文 件設置首先先介紹filter跟log4j的mdc部分,servlet api中最重要的一個功能 就是能夠為servlet和jsp頁面定義過濾器。過濾器提供了某些早期服務器所支 持的非標“serv

22、let鏈接”的一種功能強大且標準的替代品。過濾器是一個程序,它 先于與之相關的servlet或jsp頁面運行在服務器上。過濾器可附加到一個或多 個servlet或jsp頁面上,并且可以檢查進入這些資源的請求信息。在這之后, 過濾器可以作如下的選擇:1. 以常規的方式調用資源(即,調用servlet或jsp頁面)。2. 利用修改過的請求信息調用資源。3. 調用資源,但在發送響應到客戶機前對其進行修改4. 阻止該資源調用,代之以轉到其他的資源,返回一個特定的狀態代碼或 生成替換輸出。過濾器提供了幾個重要好處。首先,它以一種模塊化的或可重用的方式封裝 公共的行為。其次,利用它能夠將高級訪問決策與表現

23、代碼相分離。最后,過 濾器使你能夠對許多不同的資源進行批量性的更改log4j使得很容易地通過軟件組件命名的appendero這可以通過靜態實例 在每一類的記錄器,記錄器的名稱等于類的完全限定名稱。這是一個有用的定 義伐木者和簡單的方法。由于h志輸出帶有產生記錄的名稱,這個命名策略使 得它易于識別的日志消息的來源。然而,這只是一種可能,但共同的命名伐木 者的戰略。然而,命名后,它們所在的類的appender,似乎是迄今已知的最好 的策略。能夠有選擇性地啟用或禁用根據他們的記錄日志請求只是圖片的一部 分。的log4j允許日志請求打印到多個目的地。在log4j點講,一個輸岀目的 地叫做一個appen

24、dero目前,控制臺,文件,gui組件,遠程套接字服 務器,jms , nt事件記錄儀,遠程unix系統日志守護程序存在的 appender o它也可以異步記錄。addappender方法添加一個appender到一個給定的記錄。啟用記錄每一個 給定的記錄請求將被轉發到所有的appender中,記錄,以及在更高層次的 appendero換句話說,追加記錄器繼承相加層次。例如,如果一個控制臺appender 添加到根logger,那么所有啟用的記錄請求將至少在控制臺上打印。如果在另 外一個文件的appender被添加到一個logger說,c,然后啟用記錄為c和c的 孩子們的請求,將打印一個文件,

25、并在控制臺上。它可以覆蓋此默認行為, 使appender的積累是否不再添加劑相加標志設置false false。ndc (nested diagnostic context)和 mdc (mapped diagnostic context)是 log4j 種非常有用 的兩個類,它們用丁-存儲應用程序的上下文信息(context infomation),從而便 于在log中使用這些上下文信息。ndc采用了一個類似棧的機制來push和pop上下文信息,每一個線程都獨 立地儲存上下文信息。比如說一個servlet就可以針對每一個request創建對應的 ndc,儲存客戶端地址等等信息。“嵌套diag

26、onostic語境”,實現了 “棧”到 上下文信息可以入棧和出棧。每個線程上下文中,因此,不同的線程可以有不 同的上下文信息。當程序進入節“”它的代碼,它可以使用ndc.push ()把字 符串“a”到上下文。當它退岀了部分“一”,然后將ndc.pop ()來刪除 從上下文。正如你可以看到,您可以繼續推/彈出上下文。它是由應用程序,以 確保的的正確ndc.pop ()調用每個ndc.push ()。當一個消息被記錄,ndc 的內容附加到它,并可以顯示在h志消息patternlayout中使用“x選項。這樣, 具體到一個特定的線程上下文的信息可以顯示在日志中。這個美麗,發送郵件的記錄是不會有任何

27、關于ndc的內容或上下文線索, 它并不需要。但追加和過濾器可以使用日志消息的ndc信息的影響路由和h志 信息的顯示。除了 pamemlayout選項“ %x*,在當前的cvs)的log4j將接受或 拒絕日志消息,根據ndc的信息內容。“映射診斷上下文”,實現了鍵/值對的 信息可以存儲到一個“地圖"。ndc的一樣,每個線程上下文存儲。值存儲鍵名。 每個線程都可以使用相同的密鑰名稱,但有不同的存儲值。記錄一條消息時,該委員會的當前內容附加到它,并可以顯示在日志消息 patternlayout中使用“x"選項。多個mdc值可以顯示在一個單一的日志消息。止如ndc的追加和過濾器可以

28、使用mdc的信息顯示和路由連接到一個日 志消息。log4j的1.3版將包含基于mdc的內容當使用的時候,我們要盡可能確保在進入一個context的時候,把相關的信 息使用ndc.push(message);在離開這個context的時候使用ndc.popo將信息刪 除。另外由于設計上的一些問題,還需要保證在當前thread結束的時候使用 ndc.removeom除內存,否則會產生內存泄漏的問題。存儲了上下文信息之后,我們就可以在log的時候將信息輸岀。在相應的 patternlayout中使用”x"來輸出存儲的上下文信息,下面是一個patternlayout 的例子:使用ndc最重耍

29、的好處就是,當我們想輸岀一些上下文的信息的時候, 不需要讓logger去尋找這些信息,而只需要在適當的位置進行存儲,然后再配 置文件中修改patternlayout 在最新的log4j 1.3版本中增加了 一個 org.apache.log4j.filters.ndcmatchfilter,用來根據ndc中存儲的信息接受或拒絕 一條log信息。mdc和ndc非常相 似,所不同的是mdc內部使用了類似map 的機制來存儲信息,上下文信息也是每個線程獨立地儲存,所不同的是信息都 是以它們的key值存儲在"map”中。相對應的方法,mdc.put(key, value); mdc.remo

30、ve(key); mdc.get(key); mdc是線程獨立的,但是一個子線程會自動 獲得一個父線程mdc的copyo至于選擇ndc還是mdc要看需要存儲的上下 文信息是堆棧式的述是key/value形式的。動態修改h志配置在開發過程中,我 們經常會遇到修改log4j配置的情況,在這種情況下,頻繁重啟應用顯然是不可 接受的。幸好log4j提供了自動重新加載配置文件的能力,在配置文件修改后, 便會自己重新加載配置。在1.2及以前的版本中domconfigurator和 propertyconfigurator都提供了 configureandwatch方法,對指定的配置文件進行 監控,并且可以

31、設置檢查的間隔時間。如下是我建立的log4jfilter的源碼package com.wl.shopping.log;import java.io.ioexception;import javax.servlet.filter;import javax.servlet.filterchain;import javax.servlet.filterconfig;import javax.servlet.servletexception;import javax.servlet.servletrequest;import javax.servlet.servletresponse;import j

32、avax.servlet.http.httpservletrequest;import javax.servlet.http.httpsession;import org.apache. 1 og4j.logger;import org.apache.iog4jmdc;import com.wl.shopping.user.user;public class log4jfilter implements filter private final string user_key = "username1'private final string user_ip = ”ip”;s

33、tatic logger log 二 logger.getlogger(log4jfilter.class);public void destroy() public void dofi!ter(servletrequest request, servletresponse response,filterchain chain throws ioexception, servletexception httpservletrequest req = (httpservletrequest) request;httpsession session = req.getsession();user

34、user = (user) session.getattribute(husern);if (user != null) string username = user.getusername();mdc.put(user_key, username);string ip = req.getremoteaddr();if(ip.equals(h0:0:0:0:0:0:0:1n) ip = "localhost"mdc.put(user_ip, ip);(req.getrequesturio);chan.dofilter(request, response);

35、finally if (user != null)mdc.remove(user_key);mdc.remove(userjp);public void init(filterconfig argo) throws servletexception 通過mdc對用戶信息進行存儲,通過filter對url進行過濾,對jsp結尾的 請求進行日志操作,將其信息插入數據庫中。其中user用戶信息通過用戶登錄時記錄session來保存,其代碼如下:<% page ianguage=njavam import=njava.util.*h pageencoding=hgbkh%><% pa

36、ge import=ncom.wl.shopping.user.*n %><%string username = request.getparameter(husernameh);string password = request.getparameter(mpasswordh);user u = user.check(username, password); session.setattribute(musern, u); catch (usernotfoundexception e) out.println(e.getmessage();return; catch (passw

37、ordnotcorrectexception e) out.println(e.getmessage();return;string path 二 request.getcontextpath();string basepath 二 request.getscheme()+h:/h+request.getservername()+h:n+request.getserverport() +path+vn;%>第二部分是dao部分dao(data access objects)數據訪問對象是第一個面 向對象的接口,dao最適用于單系統應用程序或小范圍本地分布使用。package com.wl

38、.shoppingog;import java.sql.connection;import java.sql.resultset;import java.sql.sqlexception;import java.sql.statement;import java.util.arraylist;import java.util.list;import com.wl.shopping.util.db;public class log4j private string date;private string dateid;private string message;private string l

39、evel;private string username;private string ipaddr;public string getdateid() return dateid;public void setdateid(string dateid) this.dateid = dateid;public string getusemame() return username;public void setusername(string username) this.username = username;public string getdate() return date;public

40、 void setdate(string date) this.date 二 date;public string getmessage() return message;public void setmessage(string message) this.message 二 message;public string getlevel() return level;public void setlevel(string level) thisevel = level;public string getlpaddr() return ipaddr;public void setipaddr(

41、string ipaddr) this.ipaddr = ipaddr;public static int getlog4jnamelog4j(list<log4j> log4jlist, string username, int pageno, int pagesize) /log4jlist = null;connection conn = db.getconn();statement stmtcount 二 db.getstatement(conn);resultset rscount 二 null;int totalrecords = 0;rscount 二 db.getr

42、esultset(stmtcount,nselect count(*) from iog4j_message where username = fn + username + n,n);statement stmt 二 null;resultset rs = null;try rsco un 匸 next();totalrecords = rscount.getlnt(l);string sql = hselect * from log4j_message where username =+username +" order by date"+ ” limit"

43、+ (pageno - 1) * pagesize +pagesize ;system.out.print(sql);stmt = db.getstatement(conn);rs = db.getresultset(stmt, sql);while (rs.next() log4j log4j = new log4j();log4j.setdate(rs.getstring(mdaten); log4j.setdateid(rs.getstring("dateid");log4j.setusername(rs.getstring(musernameh);iog4j.set

44、message(rs.getstring(hmessageh);iog4j.setlevel(rs.getstring(hleveih);iog4j.setipaddr(rs.getstring(hipaddrh);iog4jlist.add(log4j); catch (sqlexception e) e.printstacktrace(); finally db.close(stmt);db.close(stmtcount);db.close(rs);db.close(rscount);db.close(conn);return totalrecords;public static int

45、 getdatelog4j(list<log4j> log4jlist, string date, int pageno, int pagesize) / log4jlist = new list<log4j>();connection conn = db.getconn();statement stmtcount 二 db.getstatement(conn);resultset rscount 二 null;int totalrecords = 0;rscount 二 db.getresultset(stmtcount,"select count(*) f

46、rom iog4j_message where date like + date + n%h,);statement stmt 二 null;resultset rs = null;try rsco un 匸 next();total records = rscount.getlnt(l);string sql = hselect * from log4j_message where date like !%n + date + "order by date" + ” limit ” + (pageno - 1) * pagesize + ",” + pagesi

47、ze;stmt = db.getstatement(conn);rs = db.getresultset(stmt, sql);while (rs.next() log4j log4j = new log4j(); log4j.setdate(rs.getstring(mdaten); log4j.setdateid(rs.getstring("dateid");iog4j.setusemame(rs.getstring(nusernameh);iog4j.setmessage(rs.getstring(hmessageh); iog4j.setlevel(rs.getst

48、ring(hleveih);iog4j.setipaddr(rs.getstring(hipaddrh);iog4jlist.add(log4j); catch (sqlexception e) e.printstacktrace(); finally db.close(stmt);db.close(stmtcount);db.close(rs);db.close(rscount);db.close(conn);return totalrecords;通過此dao實現對fi志的查詢工作,其數據庫表結構為第三部分就是log4jlist.jsp文件,我通過在jsp文件內嵌入java代碼實現了 lo

49、g的查詢功能,以下為查詢111用戶所得結果其頁面模塊還有翻頁功能,以下為其源碼<% page contenttype="text/html; charset=utf-8n%><% page import=hcom.wl.shopping.log.*,java.util.*"%><%!private static final int page_size = 6;%><%string strpageno = request.getparameter("pagenoh);int pageno = 1;if (strpageno

50、!= null) pageno = integer.parselnt(strpageno);if (pageno < 1)pageno = 1;%><%string action = request.getparameter("actionh);string date = request.getparameter("daten);string logusername = request.getparameter("logusername");if (date = null) date 二”;if (logusername = null)

51、 logusername = ”";list<log4j> log4jlist = new arraylist<log4j>();int totalpages = 0;int totalrecords = 0;if (action != null && action.equals(hlog4jn) if (date != null && date!") totalrecords = log4j.getdatelog4j(log4jlist, date, pageno, page_size);if (logusernam

52、e != null && logusername != "") totalrecords = log4j. getlog4j namelog4j (1 og4j li s t, logusername, pageno, page_size);totalpages = (totalrecords + page_size 1) / page_size;if (pageno > totalpages)pageno = totalpages;%><!doctype html public ”/w3c/dtd html 4.01 transition

53、al/enu "/tr/html4/loose.dtd"><html><head><meta http-equiv=ncontent-typer' content=htext/html; charset=utf-8"> <title> 日志管理 </title></head><body><table border=n 1" cellspacing二”0” cellpadding二”0” style=nwidth: 100

54、%;"> <tr><td><span>您現在位置:</span>log管理v/td></tr></table><table border=n 1" cellspacing二”0” cellpadding二”0”style="width: 100%; float: left;”<tr><td colspan=m6" style二"width: 100%; float: left;"><form action="

55、;log4jlist.jsp" method=npost"style="width: 99%; float: left;">用戶名稱vinput type="text" name=',logusername" value=<%=logusername%»時間<input type=htextn name="date" value=<%=date%» <inputtype="hiddenn name=naction" value=

56、,log4jn> <input type="submit,' style="width: 60px;” value="查詢”> </form></td></tr><tr><td style=mwidth: 10%;h>用戶名稱v/td><td style=mwidth: 10%;"> h 志等級v/td><td style=mwidth: 10%;h>ip地址v/td><td styles”width: 50%;h>

57、信息v/td><td style=mwidth: 10%;h>時間v/td></tr><%log4j log = new log4j();if (log4jlist != null) for (int i = 0; i < log4jlist.size(); i+) log = log4jlis 匸 g et(i);%><tr><td><%=log.getusername()%x/td><td><%=log.getlevel()%x/td><td><%=log.g

58、etlpaddr()%x/td><td><%=log.getmessage()%x/td> <tdx%=log.getdateid()%x/td></tr><%></table><center>第v%=pageno%>頁 &nbsp;總共v%=totalpages%>頁 &nbsp; <a href=nlog4jlist.jsp?pageno=<%=pageno 1%>&action=<%=action% >&date=<%=

59、date% >&logusername=<%=logusername 上一頁 v/a>&nbsp; <ahref="log4jlist.jsp?pageno=<%=pageno +1%>&action=<%=action% >&date=<%=date%>&logusemame=v%=logusemame %>”>下_ 頁 v/a>&nbsp;<ahref="log4jlist.jsp?pageno=<%=totalpages% >

60、&action=<%=action% >&date=< %=date%>&logusemame=v%=logusemame%>”> 最后一頁 v/a></center></body></html>這樣便完成了日志模塊的查詢工作,而且述具有翻頁功能,第四部分算是最關鍵的部分,其為配置log4j,首先必須要有log4j的jar包,其次就是配置web.xml文件,將log4jfilter加入其中<servlet><description>count the sales</description> <display-name>salescountsatistics</display-name> <servlet-name>salescountservlet</servlet

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論