本發明涉及計算機技術領域,具體而言,涉及一種動態日志記錄方法及裝置。
背景技術:
在客戶端軟件的開發和維護過程中,經常會遇到各種各樣的問題,開發人員需要依賴服務器端記錄的日志進行軟件調試或排查生產環境的問題,服務器端記錄的日志通常包括客戶端發送的請求參數和服務器向客戶端發送的返回結果。
相關技術中通常利用過濾器或攔截器等技術在服務器端記錄日志,過濾器或攔截器可以看做服務器內的應用程序,過濾器或攔截器內預先定義有需要記錄日志的類名稱和方法名稱,服務器在接收到客戶端發送的業務請求后,根據過濾器或攔截器內預先定義的類名稱和方法名稱記錄對應類和方法的請求參數和返回結果,得到日志。
然而,通過過濾器或者攔截器的方式記錄日志時,只能在過濾器或者攔截器的編譯期間指定記錄某種類和方法的日志,如果需要對某個類和方法新增日志記錄功能,需要重新編譯過濾器或攔截器,并重啟服務器。對于生產環境,重啟服務器會對線上功能產生影響,容易破壞現場,不利于問題的復現和排查;對于開發過程,重啟服務器將增長軟件調試過程,降低軟件開發和調試效率。
針對上述提到的對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率,尚未提出很好的解決方案。
技術實現要素:
有鑒于此,本發明的目的在于提供一種動態日志記錄方法及裝置,以解決相關技術中對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率的問題。
第一方面,本發明實施例提供了一種動態日志記錄方法,所述方法包括:獲取日志記錄請求,所述日志記錄請求包括與日志記錄相關的類的標識、所述類的日志記錄內容的標識、所述類的日志記錄方式的標識;當所述類的日志記錄方式為開始記錄所述類的日志時,為所述類建立代理類,通過所述代理類按照所述類的日志記錄內容記錄所述類的日志,其中,所述代理類具有日志記錄功能。
結合第一方面,本發明實施例提供了第一方面第一種可能的實施方式,其中,所述為所述類建立代理類包括:采用動態生成類的方式生成所述代理類,所述代理類持有所述類的引用,所述代理類中的方法與所述類中的方法一一對應。
結合第一方面,本發明實施例提供了第一方面第二種可能的實施方式,其中,所述通過所述代理類按照所述類的日志記錄內容記錄所述類的日志包括:在接收到所述類的業務請求時,確定所述類中執行所述業務請求的方法為第一方法,確定所述代理類中與所述第一方法對應的方法為第二方法;在所述類的日志記錄內容包括所述第一方法對應的日志記錄內容時,通過所述第二方法調用所述第一方法執行所述業務請求,并通過所述第二方法按照所述第一方法對應的日志記錄內容記錄所述類的日志,其中,所述第一方法對應的日志記錄內容包括所述第一方法在執行所述業務請求時的請求參數和/或執行結果。
結合第一方面,本發明實施例提供了第一方面第三種可能的實施方式,其中,所述方法還包括:當所述類的日志記錄方式為暫停記錄所述類的日志時,暫停通過所述代理類按照所述類的日志記錄內容記錄所述類的日志。
結合第一方面上述的實施方式,本發明實施例提供了第一方面第四種可能的實施方式,其中,所述方法還包括:當所述類的日志記錄方式為結束記錄所述類的日志時,刪除所述類的代理類,以結束通過所述代理類記錄所述類的日志。
第二方面,本發明實施例提供了一種動態日志記錄裝置,所述裝置包括:獲取模塊,用于獲取日志記錄請求,所述日志記錄請求包括與日志記錄相關的類的標識、所述類的日志記錄內容的標識、所述類的日志記錄方式的標識;日志記錄模塊,用于當所述類的日志記錄方式為開始記錄所述類的日志時,為所述類建立代理類,通過所述代理類按照所述類的日志記錄內容記錄所述類的日志,其中,所述代理類具有日志記錄功能。
結合第二方面,本發明實施例提供了第二方面第一種可能的實施方式,其中,所述日志記錄模塊包括:生成子模塊,用于采用動態生成類的方式生成所述代理類,所述代理類持有所述類的引用,所述代理類中的方法與所述類中的方法一一對應。
結合第二方面,本發明實施例提供了第二方面第二種可能的實施方式,其中,所述日志記錄模塊包括:確定子模塊,用于在接收到所述類的業務請求時,確定所述類中執行所述業務請求的方法為第一方法,確定所述代理類中與所述第一方法對應的方法為第二方法;記錄子模塊,用于在所述類的日志記錄內容包括所述第一方法對應的日志記錄內容時,通過所述第二方法調用所述第一方法執行所述業務請求,并通過所述第二方法按照所述第一方法對應的日志記錄內容記錄所述類的日志,其中,所述第一方法對應的日志記錄內容包括所述第一方法在執行所述業務請求時的請求參數和/或執行結果。
結合第二方面,本發明實施例提供了第二方面第三種可能的實施方式,其中,所述裝置還包括:暫停日志記錄模塊,用于當所述類的日志記錄方式為暫停記錄所述類的日志時,暫停通過所述代理類按照所述類的日志記錄內容記錄所述類的日志。
結合第二方面上述的實施方式,本發明實施例提供了第二方面第四種可能的實施方式,其中,所述裝置還包括:結束日志記錄模塊,用于當所述類的日志記錄方式為結束記錄所述類的日志時,刪除所述類的代理類,以結束通過所述代理類記錄所述類的日志。
本發明實施例中的方法及裝置,當需要記錄某類的日志時,為該類建立代理類,通過代理類記錄該類的日志。由于生成代理類的過程不需要重啟服務器,因此通過本發明實施例中的方法及裝置在記錄某個類的日志時,無需重啟服務器,能夠實現日志的靈活記錄,可在不對生成環境產生任何影響的前提下動態記錄指定方法的日志,并可縮短軟件調試過程,提高軟件開發和調試效率,解決相關技術中對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率的問題。
為使本發明的上述目的、特征和優點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他相關的附圖。
圖1為本發明第一實施例中動態日志記錄方法及裝置的應用環境示意圖;
圖2為本發明第一實施例中動態日志記錄方法的第一種流程示意圖;
圖3為本發明第一實施例中動態日志記錄方法的第二種流程示意圖;
圖4為本發明第二實施例中Spring Framework框架、代理類、代理類對應的類之間的依賴關系示意圖;
圖5為本發明第三實施例中動態日志記錄裝置的模塊組成示意圖。
具體實施方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發明的實施例的詳細描述并非旨在限制要求保護的本發明的范圍,而是僅僅表示本發明的選定實施例?;诒景l明的實施例,本領域技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
考慮到相關技術中對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率的問題,本發明提供了一種動態日志記錄方法及裝置,下面結合實施例進行具體描述。
為了更加清楚的介紹本發明提供的動態日志記錄方法及裝置,下面首先介紹本發明提供的動態日志記錄方法及裝置的應用環境,圖1為本發明實施例中動態日志記錄方法及裝置的應用環境示意圖,如圖1所示,本發明實施例中的應用環境包括客戶端1和服務器2,本實施例中的動態日志記錄方法及裝置應用在服務器側。在軟件開發過程中,客戶端1不斷向服務器2發送業務請求,服務器2執行該業務請求,并向客戶端1返回執行結果。為了便于軟件調試,服務器2會進行日志記錄,服務器2記錄的日志包括客戶端1發送的某個類的某個方法的請求參數(也稱入參),和/或,服務器2執行該類的該方法后向客戶端1返回的執行結果。其中,客戶端1向服務器2發送的業務請求在代碼層表現為某個類的某個方法的請求參數。
實施例一
本發明第一實施例提供了一種動態日志記錄方法,圖2為本發明實施例中動態日志記錄方法的第一種流程示意圖,該方法由圖1中的服務器執行,如圖2所示,本發明實施例中的動態日志記錄方法包括以下步驟:
步驟S202,獲取日志記錄請求,該日志記錄請求包括與日志記錄相關的類的標識、該類的日志記錄內容的標識、該類的日志記錄方式的標識。
本步驟中,服務器獲取日志記錄請求,該日志記錄請求可以由客戶端發送,也可以由開發人員直接輸入至服務器。該日志記錄請求包括與日志記錄相關的類的標識、該類的日志記錄內容的標識、該類的日志記錄方式的標識,其中,與日志記錄相關的類可以為需要記錄日志的類、暫停記錄日志的類或者結束記錄日志的類,該類的日志記錄內容的標識用來表示該類需要記錄的日志的內容、或者需要暫停記錄的日志的內容,這里的內容包括入參和/或返回結果,該類的日志記錄方式的標識用來表示該類是需要開始記錄日志,還是暫停/結束記錄日志,對應地,該類的日志記錄方式包括開始記錄該類的日志、暫停/結束記錄該類的日志。
本實施例中,日志記錄請求還可以包括該類的方法的標識,當日志記錄請求不包括該類的方法的標識時,表明該類中的所有方法都需要記錄日志,當日志記錄請求包括該類的方法的標識時,該方法的標識對應的方法需要記錄日志,其余的方法不需要記錄日志,該種情況下,上述該類的日志記錄內容的標識可以指定記錄/暫停記錄該類中哪個方法的入參和/或返回結果。
本發明實施例提供了日志記錄請求的一種具體示例,該日志記錄請求為URL(Uniform Resoure Locator,統一資源定位符)格式,比如,http://{domain}//dynamicLogger/config.do?class={class}&method={method}&action={action}&type={type},該URL中,{domain}表示web服務器的域名;{class}表示與日志記錄相關的類的標識,該參數為不可缺少的必要參數;{method}表示與日志記錄相關的類中的具體方法的標識,當該參數為空時,表示上述類中所有的方法都與日志記錄有關,當該參數不為空時,該參數所指定的方法為與日志記錄有關的方法,其沒有指定的方法與日志記錄無關,這里與日志記錄相關的方法可以為需要記錄日志的方法、暫停記錄日志的方法或者結束記錄日志的方法;{action}表示類的日志記錄方式的標識,取值有add,表示新增日志記錄,stop,表示暫停日志記錄,delete,表示結束日志記錄,{action}的默認取值通常為add;{type}表示類的日志記錄內容的標識,取值有param,表示記錄該類中需要記錄的方法的入參,即客戶端傳輸的請求參數,result,表示記錄該類中需要記錄的方法的執行結果,既服務器返回給客戶端的執行結果,all,表示記錄該類中需要記錄的方法的入參和執行結果。
步驟S204,當上述類的日志記錄方式為開始記錄該類的日志時,為該類建立代理類,通過代理類按照該類的日志記錄內容記錄該類的日志,其中,代理類具有日志記錄功能。
由于服務器在獲取到日志記錄請求后才知道需要記錄哪個類哪個方法的日志,以及需要記錄什么內容,因此為了實現靈活的日志記錄功能,本實施例中通過代理類的方式記錄日志。當日志記錄請求中表明日志記錄方式為開始記錄該類的日志時,服務器為該類建立代理類,該類就是步驟S202中的與日志記錄相關的類,服務器通過代理類按照該類的日志記錄內容記錄該類的日志。
服務器為該類建立代理類的具體過稱為:服務器采用動態生成類的方式生成代理類,代理類持有該類的引用,代理類中的方法與該類中的方法一一對應。舉例而言,服務器為類A建立代理類,類A包括A1、A2、A3三個方法,則服務器采用動態生成類的方式生成代理類B,代理類B持有類A的引用,代理類B中的方法為B1、B2、B3,依次與A1、A2、A3相對應。
本實施例中,當某類需要記錄日志時,為該類建立代理類,代理類的作用包括兩個方面,第一方面是記錄該類的日志,另一方面是調用該類執行業務請求。
服務器在為該類建立代理類之后,還通過代理類按照該類的日志記錄內容記錄該類的日志,其具體過程為:
(1)在接收到該類的業務請求時,確定該類中執行業務請求的方法為第一方法,確定代理類中與第一方法對應的方法為第二方法;
(2)在該類的日志記錄內容包括第一方法對應的日志記錄內容時,通過第二方法調用第一方法執行業務請求,并通過第二方法按照第一方法對應的日志記錄內容記錄該類的日志,其中,第一方法對應的日志記錄內容包括第一方法在執行業務請求時的請求參數和/或執行結果。
具體地,服務器在接收到該類的業務請求時,確定該類中執行業務請求的方法為第一方法,確定代理類中與第一方法對應的方法為第二方法,服務器判斷該類的日志記錄內容是否包括第一方法對應的日志記錄內容,也即在記錄該類的日志時是否記錄第一方法對應的日志,如果是,則服務器通過第二方法調用第一方法執行業務請求,第一方法執行業務請求的返回結果通過第二方法返回給客戶端,服務器還通過第二方法記錄第一方法對應的日志內容,其中,第一方法對應的日志內容包括第一方法在執行業務請求時客戶端發送的請求參數,和/或,第一方法執行業務請求的執行結果。
本發明實施例中的方法,當需要記錄某類的日志時,為該類建立代理類,通過代理類記錄該類的日志。由于生成代理類的過程不需要重啟服務器,因此通過本發明實施例中的方法在記錄某個類的日志時,無需重啟服務器,能夠實現日志的靈活記錄,可在不對生成環境產生任何影響的前提下動態記錄指定方法的日志,并可縮短軟件調試過程,提高軟件開發和調試效率,解決相關技術中對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率的問題。
圖3為本發明實施例中動態日志記錄方法的第二種流程示意圖,如圖3所示,本實施例中的方法還包括以下步驟:
步驟S206,當上述類的日志記錄方式為暫停記錄該類的日志時,暫停通過代理類按照該類的日志記錄內容記錄該類的日志。
具體地,當日志記錄請求中的日志記錄方式為暫停記錄該類的日志時,說明該類之前建立過代理類,并通過代理類記錄過日志,則服務器暫停通過代理類按照該類的日志記錄內容記錄該類的日志。
一種實施方式中,日志記錄請求不包括該類中具體方法的標識,日志記錄方式為暫停記錄該類的日志,則服務器暫停通過代理類記錄該類的所有方法的日志,另一種實施方式中,日志記錄請求包括該類中具體方法的標識,日志記錄方式為暫停記錄該類的日志,則服務器暫停通過代理類記錄該方法的日志,暫停的內容與日志記錄請求中的日志記錄內容一致。
步驟S208,當上述類的日志記錄方式為結束記錄該類的日志時,刪除該類的代理類,以結束通過代理類記錄該類的日志。
具體地,當日志記錄請求中的日志記錄方式為結束記錄該類的日志時,說明該類之前建立過代理類,并通過代理類記錄過日志,則服務器刪除該類的代理類,以結束通過代理類記錄該類的日志。
通過本發明實施例中的方法,不僅能夠開始記錄某個類某個方法的日志,還能夠暫停記錄某個類某個方法的日志,或者結束記錄某個類的日志,因此能夠實現日志的靈活記錄,滿足軟件調試過程中遇到的各種情況。
通過本發明實施例中的方法,動態的指定需要記錄日志的類和方法,無需重啟服務器,可以直接記錄日志。對于開發過程,避免了編譯、部署、重啟服務器的過程,縮短了調試流程,可以很好的提高程序開發和調試的效率。對于生產環境而言,可以在不重啟服務器的情況,啟動、暫?;蚪Y束記錄日志,一方面不會影響線上功能,另一方面也可以保護好問題發生時的現場,有利于問題的復現和排查,最后,本實施例中的方法無需一開始就記錄過多的日志,可以根據需要動態的啟動、暫停或結束記錄日志,在一定程度上提高了系統性能。本實施例中的方法對服務器的原始系統和功能沒有侵入性,對服務器性能不產生任何影響。
實施例二
為了更清楚的說明實施例一中的方法,本發明第二實施例給出了一種具體的實施過程,該實施過程基于Spring Framework框架實現,本實施方式中,預先編寫有日志記錄插件,該日志記錄插件具有接收日志記錄請求、建立代理類、開始記錄日志、暫停記錄日志或者結束記錄日志的功能,將該日志記錄插件植入Spring Framework框架,就能夠在服務器端進行靈活的日志記錄。
該日志記錄插件具有以下功能模塊:
(1)LogRequest日志請求模塊,用于接收日志記錄請求,日志記錄請求可以為前述的URL形式;
(2)LogRequestCache緩存模塊,用于緩存各個需要記錄日志的類與各自的代理類之間的映射關系,通過LogRequestCache緩存模塊存儲已經生成過的代理類,能夠提高服務器系統的性能,對于已經生成過代理類的類,無需重新生成,并且方便后續對于動態日志的取消;
(3)CustomClassLoaderManager日志記錄模塊,用于判斷日志記錄請求中的日志記錄方式,當日記記錄方式為開始記錄類的日志時,若LogRequestCache中已經包含代理類,則直接調用該代理類進行日志記錄,若LogRequestCache中不包含代理類,則為需要記錄日志的類生成代理類,并配置Spring Framework框架、該代理類、該類之間的代理關系;當日記記錄方式為暫停記錄類的日志時,取消該被暫停的類的代理類的日志記錄流程;當日志記錄方式為結束記錄類的日志時,刪除該被結束的類的代理類,并重置Spring Framework框架和該類之間的關系;
(4)CustomClassLoader自定義加載模塊,當需要生成動態代理類時,該CustomClassLoader自定義加載模塊調用JavassistHelper類,修改原類的字節碼工程,生成一個新的字節碼類,然后將生成的代理類加載到JVM當中,當要刪除動態代理類時,也由該模塊來銷毀代理類;
(5)DynamicLoggerProxy動態日志代理模塊,該模塊由JavassistHelper動態生成,該模塊直接繼承自需要記錄日志的類,其方法與被繼承類中的方法一一對應,其作用是負責對應的方法的調用;
(6)LogMethodCreator日志方法生成模塊,該模塊是DynamicLoggerProxy動態日志代理模塊中方法的生成器,用于生成具體的代理方法,根據日志記錄請求記錄不同的日志,代理類中的各個方法還需要調用對應的類中的方法執行業務請求。
圖4為本發明實施例中Spring Framework框架、代理類、代理類對應的類(與日志記錄相關的類,亦稱為業務類)之間的依賴關系示意圖,如圖4所示,對于客戶端發送的業務請求,Spring Framework框架將該業務請求發送至代理類,代理類調用對應的業務類執行該業務請求,業務類將執行結果返回給代理類,再由代理類將執行結果通過Spring Framework框架返回給客戶端。
下面介紹上述日志記錄插件植入Spring Framework框架的過程。
(1)引入Jar包:如果要使用日志記錄插件,必須引入日志記錄插件的jar(spring-dynamic-log-1.0.0.jar)包,該jar包包含了日志記錄插件的全部實現源碼;
(2)引入配置文件:1.1步驟(1)中引入的jar包中包含了spring-dynimic-log-config.xml配置文件,需要在Spring的配置文件(applicationContext.xml)中引入該配置文件,形式如下:
<import resource="spring-dynimic-log-config.xml"/>;
(3)配置入口:1.1該入口的作用是為了動態的指定需要記錄日志的類和方法。本實施例中日志記錄插件提供一種默認的實現方式,可以通過配置servlet來實現。其形式如下:
(4)指定日志記錄請求該日志記錄請求為URL(Uniform Resoure Locator,統一資源定位符)格式,比如,http://{domain}//dynamicLogger/config.do?class={class}&method={method}&action={action}&type={type},該URL中,
{domain}表示web服務器的域名;
{class}表示與日志記錄相關的類的標識,該參數為不可缺少的必要參數;
{method}表示與日志記錄相關的類中的具體方法的標識,當該參數為空時,表示上述類中所有的方法都與日志記錄有關,當該參數不為空時,該參數所指定的方法為與日志記錄有關的方法,其沒有指定的方法與日志記錄無關,這里與日志記錄相關的方法可以為需要記錄日志的方法、暫停記錄日志的方法或者結束記錄日志的方法;
{action}表示類的日志記錄方式的標識,取值有add,表示新增日志記錄,stop,表示暫停日志記錄,delete,表示結束日志記錄,{action}的默認取值通常為add;
{type}表示類的日志記錄內容的標識,取值有param,表示記錄該類中需要記錄的方法的入參,即客戶端傳輸的請求參數,result,表示記錄該類中需要記錄的方法的執行結果,既服務器返回給客戶端的執行結果,all,表示記錄該類中需要記錄的方法的入參和執行結果。
通過本發明實施例中的日志記錄插件,動態的指定需要記錄日志的類和方法,無需重啟服務器,可以直接記錄日志。對于開發過程,避免了編譯、部署、重啟服務器的過程,縮短了調試流程,可以很好的提高程序開發和調試的效率。對于生產環境而言,可以在不重啟服務器的情況,啟動、暫?;蚪Y束記錄日志,一方面不會影響線上功能,另一方面也可以保護好問題發生時的現場,有利于問題的復現和排查,最后,本實施例中的日志記錄插件無需一開始就記錄過多的日志,可以根據需要動態的啟動、暫?;蚪Y束記錄日志,在一定程度上提高了系統性能。本實施例中的日志記錄插件對服務器的原始系統和功能沒有侵入性,對服務器性能不產生任何影響。
實施例三
與實施例一中的方法對應,本發明第三實施例提供了一種動態日志記錄裝置,該裝置應用與服務器端,圖5為本發明第三實施例中動態日志記錄裝置的模塊組成示意圖,如圖5所示,該裝置包括:
獲取模塊51,用于獲取日志記錄請求,所述日志記錄請求包括與日志記錄相關的類的標識、所述類的日志記錄內容的標識、所述類的日志記錄方式的標識;
日志記錄模塊52,用于當所述類的日志記錄方式為開始記錄所述類的日志時,為所述類建立代理類,通過所述代理類按照所述類的日志記錄內容記錄所述類的日志,其中,所述代理類具有日志記錄功能。
其中,日志記錄模塊52包括:
生成子模塊,用于采用動態生成類的方式生成所述代理類,所述代理類持有所述類的引用,所述代理類中的方法與所述類中的方法一一對應。
其中,日志記錄模塊52包括:
確定子模塊,用于在接收到所述類的業務請求時,確定所述類中執行所述業務請求的方法為第一方法,確定所述代理類中與所述第一方法對應的方法為第二方法;
記錄子模塊,用于在所述類的日志記錄內容包括所述第一方法對應的日志記錄內容時,通過所述第二方法調用所述第一方法執行所述業務請求,并通過所述第二方法按照所述第一方法對應的日志記錄內容記錄所述類的日志,其中,所述第一方法對應的日志記錄內容包括所述第一方法在執行所述業務請求時的請求參數和/或執行結果。
本發明實施例中的裝置,當需要記錄某類的日志時,為該類建立代理類,通過代理類記錄該類的日志。由于生成代理類的過程不需要重啟服務器,因此通過本發明實施例中的裝置在記錄某個類的日志時,無需重啟服務器,能夠實現日志的靈活記錄,可在不對生成環境產生任何影響的前提下動態記錄指定方法的日志,并可縮短軟件調試過程,提高軟件開發和調試效率,解決相關技術中對某個類和方法新增日志記錄功能時,需要重啟服務器,從而影響生產環境、破壞問題現場,并使得軟件調試過程變長,降低軟件開發和調試效率的問題。
如圖5所示,本發明實施例中的裝置還包括:
暫停日志記錄模塊53,用于當所述類的日志記錄方式為暫停記錄所述類的日志時,暫停通過所述代理類按照所述類的日志記錄內容記錄所述類的日志。
結束日志記錄模塊54,用于當所述類的日志記錄方式為結束記錄所述類的日志時,刪除所述類的代理類,以結束通過所述代理類記錄所述類的日志。
通過本發明實施例中的裝置,不僅能夠開始記錄某個類某個方法的日志,還能夠暫停記錄某個類某個方法的日志,或者結束記錄某個類的日志,因此能夠實現日志的靈活記錄,滿足軟件調試過程中遇到的各種情況。
通過本發明實施例中的裝置,動態的指定需要記錄日志的類和方法,無需重啟服務器,可以直接記錄日志。對于開發過程,避免了編譯、部署、重啟服務器的過程,縮短了調試流程,可以很好的提高程序開發和調試的效率。對于生產環境而言,可以在不重啟服務器的情況,新增或結束動態日志,一方面不會影響線上功能,另一方面也可以保護好問題發生時的現場,有利于問題的復現和排查,最后,本實施例中的裝置無需一開始就記錄過多的日志,可以根據需要動態的新增或結束日志,在一定程度上提高了系統性能。本實施例中的裝置對服務器的原始系統和功能沒有侵入性,對服務器性能不產生任何影響。
本發明實施例所提供的動態日志記錄裝置可以為設備上的特定硬件或者安裝于設備上的軟件或固件等。本發明實施例所提供的裝置,其實現原理及產生的技術效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應內容。所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,前述描述的系統、裝置和單元的具體工作過程,均可以參考上述方法實施例中的對應過程,在此不再贅述。
在本發明所提供的實施例中,應該理解到,所揭露裝置和方法,可以通過其它的方式實現。以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,又例如,多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明提供的實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋,此外,術語“第一”、“第二”、“第三”等僅用于區分描述,而不能理解為指示或暗示相對重要性。
最后應說明的是:以上所述實施例,僅為本發明的具體實施方式,用以說明本發明的技術方案,而非對其限制,本發明的保護范圍并不局限于此,盡管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,其依然可以對前述實施例所記載的技術方案進行修改或可輕易想到變化,或者對其中部分技術特征進行等同替換;而這些修改、變化或者替換,并不使相應技術方案的本質脫離本發明實施例技術方案的精神和范圍。都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應所述以權利要求的保護范圍為準。