本發(fā)明實(shí)施例涉及電子信息處理技術(shù),尤其涉及一種日志動(dòng)態(tài)配置方法、裝置及系統(tǒng)。
背景技術(shù):
隨著Java語(yǔ)言的發(fā)展,Java的日志成為Java編程和運(yùn)行過(guò)程中不可獲取的組成部分。目前Apache為用戶(hù)提供了一個(gè)開(kāi)源的日志架構(gòu),即Log4j(Log for java,Java的日志)。
相關(guān)技術(shù)中的日志配置方法存在缺陷,需要改進(jìn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種日志動(dòng)態(tài)配置方法、裝置及系統(tǒng),可以提高服務(wù)穩(wěn)定性并實(shí)現(xiàn)對(duì)分布式節(jié)點(diǎn)的日志配置進(jìn)行更新,提高分布式節(jié)點(diǎn)日志配置更新的可靠性。
第一方面,本發(fā)明實(shí)施例提供了一種日志動(dòng)態(tài)配置方法,包括:
當(dāng)通過(guò)Log4j接收到日志配置更新指令時(shí),根據(jù)所述日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新;
獲取所述日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn);
向所述至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,以便所述目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到所述第一消息時(shí)訪問(wèn)所述日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置信息的更新,所述第一消息表示存在日志配置更新需求。
第二方面,本發(fā)明實(shí)施例還提供了一種日志動(dòng)態(tài)配置方法,包括:
當(dāng)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息,所述第一消息表示存在日志配置信息更新需求;
根據(jù)所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù),所述日志配置數(shù)據(jù)庫(kù)中存儲(chǔ)包括更新的日志配置信息;
通過(guò)所述日志配置數(shù)據(jù)庫(kù)獲取所述更新的日志配置信息。
第三方面,本發(fā)明實(shí)施例還提供了一種日志動(dòng)態(tài)配置裝置,包括:
更新指令接收模塊,用于接收日志配置更新指令;
數(shù)據(jù)庫(kù)更新模塊,用于根據(jù)所述更新指令接收模塊接收到的所述日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新;
目標(biāo)節(jié)點(diǎn)獲取模塊,用于獲取所述日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn);
發(fā)送模塊,用于向所述目標(biāo)節(jié)點(diǎn)獲取模塊獲取的所述至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,以便所述目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到所述第一消息時(shí)訪問(wèn)所述日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置信息的更新,所述第一消息表示存在日志配置更新需求。
第四方面,本發(fā)明實(shí)施例還提供了一種日志動(dòng)態(tài)配置裝置,包括:
變更消息接收模塊,用于接收第一消息,所述第一消息表示存在日志配置信息更新需求;
地址讀取模塊,用于當(dāng)所述變更消息接收模塊接收到所述第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息;
數(shù)據(jù)庫(kù)訪問(wèn)模塊,用于根據(jù)所述地址讀取模塊讀取的所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù),所述日志配置數(shù)據(jù)庫(kù)中存儲(chǔ)包括更新的日志配置信息;
配置更新模塊,用于通過(guò)所述數(shù)據(jù)庫(kù)訪問(wèn)模塊訪問(wèn)的所述日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
第五方面,本發(fā)明實(shí)施例還提供了一種日志動(dòng)態(tài)配置系統(tǒng),包括:日志管理后臺(tái)、配置中心、日志配置數(shù)據(jù)庫(kù)以及與項(xiàng)目存在訂閱關(guān)系的項(xiàng)目節(jié)點(diǎn),其中,每個(gè)項(xiàng)目被至少一個(gè)項(xiàng)目節(jié)點(diǎn)訂閱;
所述日志管理后臺(tái)接收用戶(hù)輸入的日志配置更新指令;
所述日志管理后臺(tái)根據(jù)所述日志配置更新指令向日志配置數(shù)據(jù)庫(kù)寫(xiě)入更新的日志配置信息;
所述日志配置數(shù)據(jù)庫(kù)根據(jù)日志管理后臺(tái)發(fā)送的更新的日志配置信息對(duì)已存儲(chǔ)的日志配置數(shù)據(jù)進(jìn)行更新;
所述日志管理后臺(tái)向所述配置中心發(fā)送日志更新事件;
所述配置中心接收到所述日志更新事件時(shí),從項(xiàng)目節(jié)點(diǎn)中獲取所述日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn);
所述配置中心向所述至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,所述第一消息表示存在日志配置更新需求;
目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息,并根據(jù)所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù),通過(guò)所述日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
本發(fā)明實(shí)施例能夠根據(jù)接收到的日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新,然后獲取相同項(xiàng)目下的全部目標(biāo)項(xiàng)目節(jié)點(diǎn),最后通知每個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)訪問(wèn)日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置的更新,在保持系統(tǒng)服務(wù)運(yùn)行的同時(shí)實(shí)現(xiàn)日志配置的更新,提高服務(wù)穩(wěn)定性。對(duì)于通過(guò)分布式設(shè)置的多個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn),能夠?qū)崿F(xiàn)對(duì)分布式節(jié)點(diǎn)的日志配置進(jìn)行更新,提高分布式節(jié)點(diǎn)日志配置更新的可靠性。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例中的一個(gè)日志動(dòng)態(tài)配置方法的流程圖;
圖2是本發(fā)明實(shí)施例中的另一個(gè)日志動(dòng)態(tài)配置方法的流程圖;
圖3是本發(fā)明實(shí)施例中的一個(gè)日志動(dòng)態(tài)配置裝置的結(jié)構(gòu)示意圖;
圖4是本發(fā)明實(shí)施例中的另一個(gè)日志動(dòng)態(tài)配置裝置的結(jié)構(gòu)示意圖;
圖5是本發(fā)明實(shí)施例中的一個(gè)日志動(dòng)態(tài)配置系統(tǒng)的系統(tǒng)框圖;
圖6是本發(fā)明實(shí)施例中的一個(gè)移動(dòng)終端的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
圖1為本發(fā)明實(shí)施例提供的一種日志動(dòng)態(tài)配置方法的流程圖,本實(shí)施例可適用于對(duì)分布式節(jié)點(diǎn)的日志配置進(jìn)行更新的情況??蛇x的,該方法可以由接收日志配置更新指令的web服務(wù)器來(lái)執(zhí)行,該web服務(wù)器可配置有與方法對(duì)應(yīng)的處理部件,如存儲(chǔ)有本實(shí)施例所示方法對(duì)應(yīng)的計(jì)算機(jī)程序的存儲(chǔ)器以及從該存儲(chǔ)器中讀取程序代碼進(jìn)行運(yùn)行的處理器等??蛇x的,該方法也可以由web服務(wù)器將用戶(hù)輸入的日志配置更新指令發(fā)送到特定服務(wù)器,由該特定服務(wù)器執(zhí)行本實(shí)施例提供的方法??蛇x的,該方法還可以由多個(gè)服務(wù)器通過(guò)協(xié)同運(yùn)行進(jìn)行實(shí)現(xiàn),具體協(xié)同過(guò)程后續(xù)進(jìn)行詳細(xì)說(shuō)明。本實(shí)施例提供的日志動(dòng)態(tài)配置方法如圖1所示,包括如下步驟:
步驟101、當(dāng)接收到日志配置更新指令時(shí),根據(jù)日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新。
可選的,通過(guò)Log4j接收到日志配置更新指令。
日志配置更新指令用于對(duì)Log4j中的日志配置參數(shù)進(jìn)行更新。Log4j包括Logger、Appender和Layout三個(gè)組件,其中Logger為日志記錄器,用于收集處理日志記錄,Logger對(duì)應(yīng)的日志配置參數(shù)用于對(duì)如何處理日志進(jìn)行設(shè)置。Appender表示日志輸出目的地,Appender對(duì)應(yīng)的日志配置參數(shù)用于對(duì)日志的輸出位置(或輸出地址)進(jìn)行設(shè)置。Layout用于記錄日志格式化信息,Layout對(duì)應(yīng)的日志配置參數(shù)用于對(duì)日志的輸出格式進(jìn)行設(shè)置。通常,一個(gè)Logger可對(duì)應(yīng)多個(gè)Appender,一個(gè)Appender可對(duì)應(yīng)一個(gè)Layout。
當(dāng)用戶(hù)存在對(duì)日志配置參數(shù)進(jìn)行調(diào)整需求時(shí),用戶(hù)(或程序員)可在瀏覽器中輸入Log4j的web服務(wù)器網(wǎng)址,通過(guò)訪問(wèn)該網(wǎng)址登錄到加載有Log4j的web服務(wù)器中。用戶(hù)可通過(guò)瀏覽器對(duì)Log4j的上述三個(gè)組件中的任意一個(gè)或多個(gè)組件的配置參數(shù)進(jìn)行設(shè)置。用戶(hù)在瀏覽器中輸入日志配置參數(shù)時(shí),Log4j管理后臺(tái)根據(jù)用戶(hù)輸入的日志配置參數(shù)生成日志配置更新指令。
可選的,日志配置更新指令中攜帶有用戶(hù)輸入的日志配置參數(shù)。
可選的,日志配置更新指令包括下述至少一種參數(shù):日志配置修改參數(shù)、日志配置添加參數(shù)、日志配置刪除參數(shù)。
相應(yīng)的,根據(jù)日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新,可通過(guò)下述至少一種方式進(jìn)行實(shí)施:
根據(jù)所述日志配置更新指令中攜帶的日志配置修改參數(shù),修改所述日志配置修改參數(shù)對(duì)應(yīng)的待修改日志配置參數(shù);
根據(jù)所述日志配置更新指令中攜帶的日志配置添加參數(shù),添加新的日志配置參數(shù);
根據(jù)所述日志配置更新指令中攜帶的日志配置刪除參數(shù),刪除所述日志配置刪除參數(shù)對(duì)應(yīng)的待刪除日志配置參數(shù)。
調(diào)整需求包括對(duì)已有日志配置參數(shù)的修改需求、對(duì)已有日志配置參數(shù)的刪除需求以及新建日志配置參數(shù)的添加需求。當(dāng)存在修改需求時(shí),生成的日志配置更新指令中包含日志配置修改參數(shù),用于表示對(duì)某個(gè)已有日志配置參數(shù)進(jìn)行修改,該參數(shù)包括待修改日志配置參數(shù)標(biāo)識(shí)以及修改值。當(dāng)存在刪除需求時(shí),生成的日志配置更新指令中包含日志配置刪除參數(shù),用于表示對(duì)某個(gè)已有日志配置參數(shù)進(jìn)行刪除,該參數(shù)包括待刪除日志配置參數(shù)標(biāo)識(shí)(如名稱(chēng))。當(dāng)存在添加需求時(shí),生成的日志配置更新指令中包含日志配置添加參數(shù),用于表示添加日志配置參數(shù),該參數(shù)包括待添加的日志配置參數(shù)標(biāo)識(shí)(如名稱(chēng))以及參數(shù)值。
可選的,日志配置數(shù)據(jù)庫(kù)中配置有日志配置信息表(又稱(chēng)Logger配置表)、日志輸出控制配置表(又稱(chēng)Appender配置表)和日志輸出格式配置表(又稱(chēng)Layout配置表)。其中,日志配置信息表(又稱(chēng)Logger配置表)包括項(xiàng)目標(biāo)識(shí)(project)、項(xiàng)目名稱(chēng)和日志級(jí)別(level),日志輸出控制配置表(又稱(chēng)Appender配置表)包括日志輸出類(lèi)型(type)和輸出路徑(path),日志輸出格式配置表(又稱(chēng)Layout配置表)包括輸出格式。上述三個(gè)配置表中均含有更新時(shí)間屬性(u_time),用于保存該條記錄(日志配置參數(shù))的最新修改時(shí)間。
Logger配置表中項(xiàng)目名稱(chēng)為日志(logger)的名稱(chēng),對(duì)應(yīng)java類(lèi)的包名。日志級(jí)別(level)的值可以為下述任意一個(gè):OFF(關(guān)閉)FATAL(致命的)ERROR(錯(cuò)誤)WARN(警告)INFO(信息)DEBUG(調(diào)試)ALL(所有)。
Appender配置表中日志輸出類(lèi)型(type)的值可以為下述任意一個(gè):Console(控制臺(tái))File(文件)JDBC、JMS。輸出路徑(path)表示日志的存儲(chǔ)地址。
Layout配置表中輸出格式(pattern)的值可以為下述任意一個(gè):
org.apache.log4j.HTMLLayout(以HTML表格形式布局)、
org.apache.log4j.PatternLayout(可以靈活地指定布局模式)、
org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串)、
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類(lèi)別等等信息)。
進(jìn)一步的,可在初始化階段對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行初始化,例如,在日志配置數(shù)據(jù)庫(kù)中上述日志配置信息表、日志輸出控制配置表和日志輸出格式配置表。
步驟102、獲取日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)。
現(xiàn)有技術(shù)中日志配置更新的對(duì)象為某一個(gè)節(jié)點(diǎn)(或服務(wù)器)。在一種實(shí)現(xiàn)方式中,本發(fā)明實(shí)施例的更新對(duì)象為目標(biāo)項(xiàng)目對(duì)應(yīng)的全部節(jié)點(diǎn)。例如,目標(biāo)項(xiàng)目A涉及節(jié)點(diǎn)a、節(jié)點(diǎn)b和節(jié)點(diǎn)c,現(xiàn)有技術(shù)中由于用戶(hù)所在終端的IP地址唯一,因此該地址通過(guò)哈希算法等地址映射后,只能夠?qū)?jié)點(diǎn)a、節(jié)點(diǎn)b或節(jié)點(diǎn)c進(jìn)行擇一更新,即無(wú)法對(duì)與映射后的節(jié)點(diǎn)(如節(jié)點(diǎn)a)屬于相同目標(biāo)項(xiàng)目的其他節(jié)點(diǎn)(如節(jié)點(diǎn)b和節(jié)點(diǎn)c)進(jìn)行日志配置更新,進(jìn)而無(wú)法滿(mǎn)足分布式系統(tǒng)的日志配置更新需求。本發(fā)明實(shí)施例可實(shí)現(xiàn)面向項(xiàng)目的日志配置更新,即在接收到用戶(hù)輸入的日志配置更新指令后,獲取日志配置更新指令對(duì)應(yīng)的全部目標(biāo)項(xiàng)目節(jié)點(diǎn),進(jìn)而能夠?qū)θ磕繕?biāo)項(xiàng)目節(jié)點(diǎn)進(jìn)行日志配置更新。
可選的,步驟102可通過(guò)下屬方式進(jìn)行實(shí)施:
步驟1021、獲取日志配置更新信息所屬的目標(biāo)項(xiàng)目。
根據(jù)日志配置更新指令指向的日志配置參數(shù)可確定該被指向的日志配置參數(shù)所在的項(xiàng)目標(biāo)識(shí)(project),該項(xiàng)目標(biāo)識(shí)(project)為目標(biāo)項(xiàng)目的項(xiàng)目標(biāo)識(shí)。
步驟1022、將與目標(biāo)項(xiàng)目存在訂閱關(guān)系的節(jié)點(diǎn)確定為目標(biāo)項(xiàng)目節(jié)點(diǎn)。
可在項(xiàng)目生成時(shí)生成節(jié)點(diǎn)與項(xiàng)目的訂閱關(guān)系,該訂閱關(guān)系又稱(chēng)為映射關(guān)系,即屬于同一個(gè)項(xiàng)目X的多個(gè)項(xiàng)目節(jié)點(diǎn)訂閱均訂閱項(xiàng)目X,以便當(dāng)項(xiàng)目X的日志配置參數(shù)發(fā)生變化時(shí),可根據(jù)訂閱關(guān)系確定需要告知的目標(biāo)項(xiàng)目節(jié)點(diǎn)。
步驟103、向至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,以便目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到第一消息時(shí)訪問(wèn)日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置信息的更新。
其中,第一消息表示存在日志配置更新需求。目標(biāo)項(xiàng)目節(jié)點(diǎn)可以為服務(wù)器也可以為移動(dòng)終端等用戶(hù)設(shè)備。
第一消息可以為一個(gè)內(nèi)容為空的具有特定信令標(biāo)識(shí)的信息。目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到第一消息時(shí),確定存在日志配置的更新需求。目標(biāo)項(xiàng)目節(jié)點(diǎn)根據(jù)預(yù)存儲(chǔ)的日志配置數(shù)據(jù)庫(kù)地址訪問(wèn)日志配置數(shù)據(jù)庫(kù),根據(jù)日志配置數(shù)據(jù)庫(kù)中已更新的日志配置信息對(duì)目標(biāo)項(xiàng)目節(jié)點(diǎn)本地的日志配置信息進(jìn)行更新。
可選的,第一消息中可攜帶有日志配置數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)地址信息,以便在目標(biāo)項(xiàng)目節(jié)點(diǎn)中未預(yù)置日志配置數(shù)據(jù)庫(kù)地址時(shí),根據(jù)第一消息中攜帶的數(shù)據(jù)庫(kù)地址信息對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。
圖2為本發(fā)明實(shí)施例提供的另一種日志動(dòng)態(tài)配置方法的流程圖,圖2所示方法為與圖1所示方法匹配,圖2所示方法可實(shí)施在目標(biāo)項(xiàng)目節(jié)點(diǎn)中,該方法包括:
步驟201、當(dāng)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息。
其中,第一消息表示存在日志配置信息更新需求。該數(shù)據(jù)庫(kù)地址信息可以為預(yù)存的,也可以為從第一消息中解析得到的。
步驟202、根據(jù)數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù)。
其中,日志配置數(shù)據(jù)庫(kù)中存儲(chǔ)包括更新的日志配置信息。
步驟203、通過(guò)日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
根據(jù)數(shù)據(jù)庫(kù)地址信息可登錄到日志配置數(shù)據(jù)庫(kù),通過(guò)數(shù)據(jù)庫(kù)讀寫(xiě)語(yǔ)言以及查詢(xún)語(yǔ)言可獲取到更新的日志配置信息。
示例性的,可使用Log plugin插件從數(shù)據(jù)庫(kù)中加載最新的logger,然后刷新LoggerContext以使配置生效。
本發(fā)明實(shí)施例能夠根據(jù)接收到的日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新,然后獲取相同項(xiàng)目下的全部目標(biāo)項(xiàng)目節(jié)點(diǎn),最后通知每個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)訪問(wèn)日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置的更新,在不關(guān)閉系統(tǒng)服務(wù)的同時(shí)實(shí)現(xiàn)日志配置的更新,提高服務(wù)穩(wěn)定性。對(duì)于通過(guò)分布式設(shè)置的多個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn),能夠?qū)崿F(xiàn)對(duì)分布式節(jié)點(diǎn)的日志配置進(jìn)行更新,提高分布式節(jié)點(diǎn)日志配置更新的可靠性。
本發(fā)明實(shí)施例提供的日志動(dòng)態(tài)配置方法,除了能夠達(dá)到上述有益效果,還能夠?yàn)橛脩?hù)提供在線動(dòng)態(tài)的日志級(jí)別配置,使得用戶(hù)在定位程序問(wèn)題時(shí),可在不重啟系統(tǒng)服務(wù)的前提下,將日志級(jí)別修改為DEBUG?;蛘?,用戶(hù)在遇到性能瓶頸時(shí),可在不重啟系統(tǒng)服務(wù)的前提下,將日志級(jí)別修改為ERROR,提高測(cè)試效率。此外,用戶(hù)能夠動(dòng)態(tài)修改、增加或刪除日志的輸出地址或輸出格式。提高用戶(hù)操作的靈活性以及修改操作的全面性。
圖3為本發(fā)明實(shí)施例提供的一種日志動(dòng)態(tài)配置裝置的結(jié)構(gòu)示意圖,該裝置可位于日志管理后臺(tái)服務(wù)器中,例如運(yùn)行Log4j管理后臺(tái)的服務(wù)器,用于實(shí)現(xiàn)圖1所示的方法,如圖3所示,該日志動(dòng)態(tài)配置裝置包括:更新指令接收模塊11,用于接收日志配置更新指令;
數(shù)據(jù)庫(kù)更新模塊12,用于根據(jù)所述更新指令接收模塊11接收到的所述日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新;
目標(biāo)節(jié)點(diǎn)獲取模塊13,用于獲取所述日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn);
發(fā)送模塊14,用于向所述目標(biāo)節(jié)點(diǎn)獲取模塊13獲取的所述至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,以便所述目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到所述第一消息時(shí)訪問(wèn)所述日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置信息的更新,所述第一消息表示存在日志配置更新需求。
進(jìn)一步的,所述目標(biāo)節(jié)點(diǎn)獲取模塊13用于:
獲取所述日志配置更新信息所屬的目標(biāo)項(xiàng)目;
將與所述目標(biāo)項(xiàng)目存在訂閱關(guān)系的節(jié)點(diǎn)確定為目標(biāo)項(xiàng)目節(jié)點(diǎn)。
進(jìn)一步的,還包括數(shù)據(jù)庫(kù)配置模塊15;
所述數(shù)據(jù)庫(kù)配置模塊15用于,在所述日志配置數(shù)據(jù)庫(kù)中配置日志配置信息表、日志輸出控制配置表和日志輸出格式配置表,其中,日志配置信息表包括項(xiàng)目標(biāo)識(shí)、項(xiàng)目名稱(chēng)和日志級(jí)別,日志輸出控制配置表包括日志輸出類(lèi)型和輸出路徑,日志輸出格式配置表包括輸出格式。
進(jìn)一步的,所述日志配置更新指令包括下述至少一種參數(shù):日志配置修改參數(shù)、日志配置添加參數(shù)、日志配置刪除參數(shù)。相應(yīng)的,所述數(shù)據(jù)庫(kù)更新模塊用于:
根據(jù)所述日志配置更新指令中攜帶的日志配置修改參數(shù),修改所述日志配置修改參數(shù)對(duì)應(yīng)的待修改日志配置參數(shù);或者,根據(jù)所述日志配置更新指令中攜帶的日志配置添加參數(shù),添加新的日志配置參數(shù);或者,根據(jù)所述日志配置更新指令中攜帶的日志配置刪除參數(shù),刪除所述日志配置刪除參數(shù)對(duì)應(yīng)的待刪除日志配置參數(shù)。
圖4為本發(fā)明實(shí)施例提供的另一種日志動(dòng)態(tài)配置裝置的結(jié)構(gòu)示意圖,該裝置可位于項(xiàng)目節(jié)點(diǎn)中,用于實(shí)現(xiàn)圖2所示的方法,如圖4所示,該日志動(dòng)態(tài)配置裝置包括:
變更消息接收模塊21,用于接收第一消息,所述第一消息表示存在日志配置信息更新需求;
地址讀取模塊22,用于當(dāng)所述變更消息接收模塊21接收到所述第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息;
數(shù)據(jù)庫(kù)訪問(wèn)模塊23,用于根據(jù)所述地址讀取模塊22讀取的所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù),所述日志配置數(shù)據(jù)庫(kù)中存儲(chǔ)包括更新的日志配置信息;
配置更新模塊24,用于通過(guò)所述數(shù)據(jù)庫(kù)訪問(wèn)模塊23訪問(wèn)的所述日志配置數(shù)據(jù)庫(kù)獲取所述更新的日志配置信息。
上述裝置可執(zhí)行本發(fā)明前述所有實(shí)施例所提供的方法,具備執(zhí)行上述方法相應(yīng)的功能模塊和有益效果。未在本實(shí)施例中詳盡描述的技術(shù)細(xì)節(jié),可參見(jiàn)本發(fā)明前述實(shí)施例所提供的方法。
圖5為本發(fā)明實(shí)施例提供的一種日志動(dòng)態(tài)配置系統(tǒng)的系統(tǒng)框圖,該系統(tǒng)用于實(shí)現(xiàn)上述實(shí)施例所示的方法,包括:日志管理后臺(tái)、配置中心、日志配置數(shù)據(jù)庫(kù)以及與項(xiàng)目存在訂閱關(guān)系的項(xiàng)目節(jié)點(diǎn),其中,每個(gè)項(xiàng)目被至少一個(gè)項(xiàng)目節(jié)點(diǎn)訂閱。
步驟301、日志管理后臺(tái)接收用戶(hù)輸入的日志配置更新指令。
可選的,日志管理后臺(tái)為L(zhǎng)og4j管理后臺(tái)。
步驟302、日志管理后臺(tái)根據(jù)日志配置更新指令向日志配置數(shù)據(jù)庫(kù)寫(xiě)入更新的日志配置信息。
可選的,日志管理后臺(tái)根據(jù)日志配置更新指令確定更新的日志配置信息。然后,日志管理后臺(tái)通過(guò)超文本傳輸協(xié)議(HyperText Transfer Protocol,http)向日志配置數(shù)據(jù)庫(kù)發(fā)送更新的日志配置信息。
步驟303、日志配置數(shù)據(jù)庫(kù)根據(jù)日志管理后臺(tái)發(fā)送的更新的日志配置信息對(duì)已存儲(chǔ)的日志配置數(shù)據(jù)進(jìn)行更新。
示例性的,管理后臺(tái)通過(guò)http請(qǐng)求修改Logger配置表,更新Logger的更新時(shí)間(u_time),并通過(guò)傳輸控制協(xié)議(Transmission Control Protocol,TCP)向配置中心發(fā)布一個(gè)節(jié)點(diǎn)變更事件。
示例性的,管理后臺(tái)通過(guò)http請(qǐng)求修改Appender配置表,更新Appender的更新時(shí)間(u_time),并通過(guò)TCP向配置中心發(fā)布一個(gè)節(jié)點(diǎn)變更事件。
示例性的,管理后臺(tái)通過(guò)http請(qǐng)求修改Layout配置表,更新Layout的更新時(shí)間(u_time),并通過(guò)TCP向配置中心發(fā)布一個(gè)節(jié)點(diǎn)變更事件。
步驟304、日志管理后臺(tái)向配置中心發(fā)送日志更新事件。
可選的,日志管理后臺(tái)通過(guò)傳輸控制協(xié)議TCP向配置中心發(fā)送(又稱(chēng)發(fā)布)日志更新事件。
由于TCP為傳輸層協(xié)議因此TCP的響應(yīng)速度高于http的響應(yīng)速度。為了提高實(shí)時(shí)性,通過(guò)TCP向配置中心發(fā)送日志更新事件能夠更加安全、快捷的實(shí)現(xiàn)日志更新時(shí)間的通知。
步驟305、配置中心接收到日志更新事件時(shí),從項(xiàng)目節(jié)點(diǎn)中獲取日志配置更新指令對(duì)應(yīng)的至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)。
步驟306、配置中心向至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息。
其中,第一消息表示存在日志配置更新需求。進(jìn)一步的,配置中心向至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息,包括:
配置中心通過(guò)傳輸控制協(xié)議TCP向至少一個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)發(fā)送第一消息。
步驟307、目標(biāo)項(xiàng)目節(jié)點(diǎn)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息,并根據(jù)數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù),通過(guò)日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
配置中心通過(guò)TCP以第一消息的方式,通知目標(biāo)項(xiàng)目節(jié)點(diǎn)中的Log plugin插件從數(shù)據(jù)庫(kù)中加載最新的APPENDER,刷新LoggerContext以使配置生效。
目標(biāo)項(xiàng)目節(jié)點(diǎn)可通過(guò)下述程序語(yǔ)言進(jìn)行日志配置數(shù)據(jù)庫(kù)的訪問(wèn)以及日志配置數(shù)據(jù)的更新:
//獲取log4j2.xml的logger配置
LoggerContext ctx=(LoggerContext)LogManager.getContext(false);
Configuration config=ctx.getConfiguration();
Map<String,LoggerConfig>loggers=config.getLoggers();
//更新logger級(jí)別
logger.setLevel(level);
//刷新log配置
ctx.updateLoggers()。
需要說(shuō)明的是,日志管理后臺(tái)、配置中心和日志配置數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方式有多種,例如將上述三個(gè)部件全部配置到一網(wǎng)絡(luò)側(cè)服務(wù)器中;或者,將任意兩個(gè)部件配置到一個(gè)網(wǎng)絡(luò)側(cè)服務(wù)器,將另一個(gè)部件配置到另一網(wǎng)絡(luò)側(cè)服務(wù)器中;或者,將三個(gè)部件分別配置到網(wǎng)絡(luò)側(cè)服務(wù)器中。上述網(wǎng)絡(luò)側(cè)服務(wù)器可以為實(shí)體硬件服務(wù)器也可以為例如虛擬機(jī)形式的虛擬服務(wù)器。
本發(fā)明實(shí)施例提供的日志動(dòng)態(tài)配置系統(tǒng)能夠根據(jù)通過(guò)log4j接收到的日志配置更新指令對(duì)日志配置數(shù)據(jù)庫(kù)進(jìn)行更新,然后獲取相同項(xiàng)目下的全部目標(biāo)項(xiàng)目節(jié)點(diǎn),最后通知每個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn)訪問(wèn)日志配置數(shù)據(jù)庫(kù)進(jìn)行日志配置的更新,在不關(guān)閉系統(tǒng)服務(wù)的同時(shí)實(shí)現(xiàn)日志配置的更新,提高服務(wù)穩(wěn)定性。對(duì)于通過(guò)分布式設(shè)置的多個(gè)目標(biāo)項(xiàng)目節(jié)點(diǎn),能夠?qū)崿F(xiàn)對(duì)分布式節(jié)點(diǎn)的日志配置進(jìn)行更新,提高分布式節(jié)點(diǎn)日志配置更新的可靠性。
本發(fā)明實(shí)施例提供的日志動(dòng)態(tài)配置方法,除了能夠達(dá)到上述有益效果,還能夠?yàn)橛脩?hù)提供在線動(dòng)態(tài)的日志級(jí)別配置,使得用戶(hù)在定位程序問(wèn)題時(shí),可在不重啟系統(tǒng)服務(wù)的前提下,將日志級(jí)別修改為DEBUG。或者,用戶(hù)在遇到性能瓶頸時(shí),可在不重啟系統(tǒng)服務(wù)的前提下,將日志級(jí)別修改為ERROR,提高測(cè)試效率。此外,用戶(hù)能夠動(dòng)態(tài)修改、增加或刪除日志的輸出地址或輸出格式。提高用戶(hù)操作的靈活性以及修改操作的全面性。
項(xiàng)目節(jié)點(diǎn)可以配置在服務(wù)器也可以配置在移動(dòng)終端。本發(fā)明實(shí)施例提供一種項(xiàng)目節(jié)點(diǎn)(或目標(biāo)項(xiàng)目節(jié)點(diǎn))為移動(dòng)終端時(shí),節(jié)點(diǎn)的硬件結(jié)構(gòu)設(shè)計(jì)。圖6為本發(fā)明實(shí)施例提供的一種移動(dòng)終端的結(jié)構(gòu)示意圖,該移動(dòng)終端可以包括:殼體(圖中未示出)、存儲(chǔ)器801、中央處理器(Central Processing Unit,CPU)802(又稱(chēng)處理器,以下簡(jiǎn)稱(chēng)CPU)、存儲(chǔ)在存儲(chǔ)器801上并可在處理器802上運(yùn)行的計(jì)算機(jī)程序、電路板(圖中未示出)和電源電路(圖中未示出)。所述電路板安置在所述殼體圍成的空間內(nèi)部;所述CPU802和所述存儲(chǔ)器801設(shè)置在所述電路板上;所述電源電路,用于為所述移動(dòng)終端的各個(gè)電路或器件供電;所述存儲(chǔ)器801,用于存儲(chǔ)可執(zhí)行程序代碼;所述CPU802通過(guò)讀取所述存儲(chǔ)器801中存儲(chǔ)的可執(zhí)行程序代碼來(lái)運(yùn)行與所述可執(zhí)行程序代碼對(duì)應(yīng)的程序,以用于執(zhí)行:當(dāng)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息;根據(jù)所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù);通過(guò)所述日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
所述移動(dòng)終端還包括:外設(shè)接口803、RF(Radio Frequency,射頻)電路805、音頻電路806、揚(yáng)聲器811、電源管理芯片808、輸入/輸出(I/O)子系統(tǒng)809、觸摸屏812、其他輸入/控制設(shè)備810以及外部端口804,這些部件通過(guò)一個(gè)或多個(gè)通信總線或信號(hào)線807來(lái)通信。
應(yīng)該理解的是,圖示移動(dòng)終端800僅僅是移動(dòng)終端的一個(gè)范例,并且移動(dòng)終端800可以具有比圖中所示出的更多的或者更少的部件,可以組合兩個(gè)或更多的部件,或者可以具有不同的部件配置。圖中所示出的各種部件可以在包括一個(gè)或多個(gè)信號(hào)處理和/或?qū)S眉呻娐吩趦?nèi)的硬件、軟件、或硬件和軟件的組合中實(shí)現(xiàn)。
下面就本實(shí)施例提供的用于實(shí)現(xiàn)日志動(dòng)態(tài)配置方法的移動(dòng)終端進(jìn)行詳細(xì)的描述,該移動(dòng)終端以手機(jī)為例。
存儲(chǔ)器801,所述存儲(chǔ)器801可以被CPU802、外設(shè)接口803等訪問(wèn),所述存儲(chǔ)器801可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如一個(gè)或多個(gè)磁盤(pán)存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。
外設(shè)接口803,所述外設(shè)接口803可以將設(shè)備的輸入和輸出外設(shè)連接到CPU802和存儲(chǔ)器801。
I/O子系統(tǒng)809,所述I/O子系統(tǒng)809可以將設(shè)備上的輸入輸出外設(shè),例如觸摸屏812和其他輸入/控制設(shè)備810,連接到外設(shè)接口803。I/O子系統(tǒng)809可以包括顯示控制器8091和用于控制其他輸入/控制設(shè)備810的一個(gè)或多個(gè)輸入控制器8092。其中,一個(gè)或多個(gè)輸入控制器8092從其他輸入/控制設(shè)備810接收電信號(hào)或者向其他輸入/控制設(shè)備810發(fā)送電信號(hào),其他輸入/控制設(shè)備810可以包括物理按鈕(按壓按鈕、搖臂按鈕等)、撥號(hào)盤(pán)、滑動(dòng)開(kāi)關(guān)、操縱桿、點(diǎn)擊滾輪。值得說(shuō)明的是,輸入控制器8092可以與以下任一個(gè)連接:鍵盤(pán)、紅外端口、USB接口以及諸如鼠標(biāo)的指示設(shè)備。
其中,按照觸摸屏的工作原理和傳輸信息的介質(zhì)分類(lèi),觸摸屏812可以為電阻式、電容感應(yīng)式、紅外線式或表面聲波式。按照安裝方式分類(lèi),觸摸屏812可以為:外掛式、內(nèi)置式或整體式。按照技術(shù)原理分類(lèi),觸摸屏812可以為:矢量壓力傳感技術(shù)觸摸屏、電阻技術(shù)觸摸屏、電容技術(shù)觸摸屏、紅外線技術(shù)觸摸屏或表面聲波技術(shù)觸摸屏。
觸摸屏812,所述觸摸屏812是用戶(hù)終端與用戶(hù)之間的輸入接口和輸出接口,將可視輸出顯示給用戶(hù),可視輸出可以包括圖形、文本、圖標(biāo)、視頻等??蛇x的,觸摸屏812將用戶(hù)在觸屏幕上觸發(fā)的電信號(hào)(如接觸面的電信號(hào)),發(fā)送給處理器802。
I/O子系統(tǒng)809中的顯示控制器8091從觸摸屏812接收電信號(hào)或者向觸摸屏812發(fā)送電信號(hào)。觸摸屏812檢測(cè)觸摸屏上的接觸,顯示控制器8091將檢測(cè)到的接觸轉(zhuǎn)換為與顯示在觸摸屏812上的用戶(hù)界面對(duì)象的交互,即實(shí)現(xiàn)人機(jī)交互,顯示在觸摸屏812上的用戶(hù)界面對(duì)象可以是運(yùn)行游戲的圖標(biāo)、聯(lián)網(wǎng)到相應(yīng)網(wǎng)絡(luò)的圖標(biāo)等。值得說(shuō)明的是,設(shè)備還可以包括光鼠,光鼠是不顯示可視輸出的觸摸敏感表面,或者是由觸摸屏形成的觸摸敏感表面的延伸。
RF電路805,主要用于建立手機(jī)與無(wú)線網(wǎng)絡(luò)(即網(wǎng)絡(luò)側(cè))的通信,實(shí)現(xiàn)手機(jī)與無(wú)線網(wǎng)絡(luò)的數(shù)據(jù)接收和發(fā)送。例如收發(fā)短信息、電子郵件等。
音頻電路806,主要用于從外設(shè)接口803接收音頻數(shù)據(jù),將該音頻數(shù)據(jù)轉(zhuǎn)換為電信號(hào),并且將該電信號(hào)發(fā)送給揚(yáng)聲器811。
揚(yáng)聲器811,用于將手機(jī)通過(guò)RF電路805從無(wú)線網(wǎng)絡(luò)接收的語(yǔ)音信號(hào),還原為聲音并向用戶(hù)播放該聲音。
電源管理芯片808,用于為CPU802、I/O子系統(tǒng)及外設(shè)接口所連接的硬件進(jìn)行供電及電源管理。
在本實(shí)施例中,中央處理器802用于:當(dāng)接收到第一消息時(shí),讀取數(shù)據(jù)庫(kù)地址信息;根據(jù)所述數(shù)據(jù)庫(kù)地址信息訪問(wèn)日志配置數(shù)據(jù)庫(kù);通過(guò)所述日志配置數(shù)據(jù)庫(kù)獲取更新的日志配置信息。
需要說(shuō)明的是,移動(dòng)終端還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過(guò)以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說(shuō)明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。