本發(fā)明涉及通信領(lǐng)域,尤其涉及一種遠(yuǎn)程日志獲取方法及系統(tǒng)。
背景技術(shù):
在生產(chǎn)工具生產(chǎn)產(chǎn)品的過(guò)程中,生產(chǎn)工具會(huì)產(chǎn)生很多日志文件,當(dāng)需要遠(yuǎn)程下載并查看這些日志文件時(shí),通常會(huì)接入一個(gè)日志獲取系統(tǒng)來(lái)獲取日志文件;這樣的部署不易于用戶(hù)操作,且一次性下載眾多的日志文件需要耗用較長(zhǎng)時(shí)間,效率降低,有時(shí)甚至下載失敗,不利于有效跟蹤解決問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中的缺陷,本發(fā)明提供一種遠(yuǎn)程日志獲取方法及系統(tǒng)。
一方面,本發(fā)明提供了一種遠(yuǎn)程日志獲取方法,包括:
第一設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟S1:所述第一設(shè)備等待并讀取自身的第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟S2;如為結(jié)束標(biāo)識(shí),則結(jié)束;
步驟S2:所述第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,返回步驟S1;
第二設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟S3:所述第二設(shè)備與所述第一設(shè)備建立非網(wǎng)絡(luò)連接,并將自身的第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口;
步驟S4:所述第二設(shè)備將打印的日志寫(xiě)至所述第二預(yù)設(shè)端口中。
可選地,所述步驟S1之前,還包括:所述第一設(shè)備打開(kāi)自身的第一預(yù)設(shè)端口。
所述步驟S4,具體為:所述第二設(shè)備依次將打印的日志寫(xiě)至所述第二預(yù)設(shè)端口中。
可選地,所述步驟S2中,所述第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體包括:
步驟n1:所述第一設(shè)備將讀取到的日志保存至緩存中,并判斷所述緩存中日志的長(zhǎng)度是否小于預(yù)設(shè)長(zhǎng)度,是則返回步驟S1;否則執(zhí)行步驟n2;
步驟n2:所述第一設(shè)備將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,并將所述緩存清空;
所述步驟S1中,當(dāng)所述第一設(shè)備判斷出讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),還包括:
步驟m:所述第一設(shè)備判斷所述緩存中是否有日志,是則將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,并將所述緩存清空,結(jié)束;否則,結(jié)束。
可選地,所述步驟S2之前,還包括:
所述第一設(shè)備與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
所述步驟S2中,所述第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體為:
所述第一設(shè)備將讀取到的日志發(fā)送至所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
所述步驟S2中,返回步驟S1之前,還包括:
所述第一設(shè)備關(guān)閉所述第三預(yù)設(shè)端口,并斷開(kāi)與所述遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,所述步驟S1之前,還包括:
所述第一設(shè)備與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
所述步驟S2中,所述第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體為:
所述第一設(shè)備將讀取到的日志發(fā)送至所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
所述步驟S1中,當(dāng)所述第一設(shè)備判斷出讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),還包括:
所述第一設(shè)備關(guān)閉所述第三預(yù)設(shè)端口,并斷開(kāi)與所述遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,所述步驟S2中,當(dāng)所述第一設(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟a1;
步驟a1:所述第一設(shè)備將讀取到的日志保存;
步驟a2:所述第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將保存的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,返回步驟S1;否則繼續(xù)執(zhí)行步驟a2。
可選地,所述步驟S2中,當(dāng)所述第一設(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟b1;
步驟b1:所述第一設(shè)備將讀取到的日志保存至緩存中;
步驟b2:所述第一設(shè)備等待并讀取自身的第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至所述緩存中,執(zhí)行步驟b3;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟b4;
步驟b3:所述第一設(shè)備與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,返回步驟S1;否則返回步驟b2;
步驟b4:所述第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,結(jié)束;否則繼續(xù)執(zhí)行步驟b4。
可選地,所述步驟S2中,當(dāng)所述第一設(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟c1;
步驟c1:所述第一設(shè)備新建臨時(shí)文件,將讀取到的日志保存至所述臨時(shí)文件中;
步驟c2:所述第一設(shè)備等待并讀取自身的第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至所述臨時(shí)文件中,執(zhí)行步驟c3;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟c4;
步驟c3:所述第一設(shè)備與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則將所述臨時(shí)文件發(fā)送給所述遠(yuǎn)程服務(wù)器,返回步驟S1;或者將所述臨時(shí)文件中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,返回步驟S1;否則返回步驟c2;
步驟c4:所述第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將所述臨時(shí)文件發(fā)送給所述遠(yuǎn)程服務(wù)器,結(jié)束;或者將所述臨時(shí)文件中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器,結(jié)束;否則繼續(xù)執(zhí)行步驟c4。
可選地,所述步驟S3中,所述第二設(shè)備將自身的第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口,具體為:
所述第二設(shè)備執(zhí)行第一指令將自身的第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口。
另一方面,本發(fā)明提供了一種遠(yuǎn)程日志獲取系統(tǒng),包括:第一設(shè)備、第二設(shè)備和遠(yuǎn)程服務(wù)器;
所述第一設(shè)備包括:第一讀取模塊、第一判斷模塊和第一發(fā)送模塊;
所述第一讀取模塊,用于讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第一判斷模塊,用于判斷所述第一讀取模塊讀取到的數(shù)據(jù)的類(lèi)型;
所述第一發(fā)送模塊,用于當(dāng)所述第一判斷模塊判斷出所述第一讀取模塊讀取到的數(shù)據(jù)為日志時(shí),將所述第一讀取模塊讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的所述遠(yuǎn)程服務(wù)器;
所述第二設(shè)備包括:第一連接模塊、定向模塊和寫(xiě)模塊;
所述第一連接模塊,用于與所述第一設(shè)備建立非網(wǎng)絡(luò)連接;
所述定向模塊,用于將第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口;
所述寫(xiě)模塊,用于將打印的日志寫(xiě)至所述第二預(yù)設(shè)端口中。
可選地,所述第一設(shè)備還包括:打開(kāi)模塊;
所述打開(kāi)模塊,用于所述第一讀取模塊讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù)之前,打開(kāi)所述第一預(yù)設(shè)端口。
所述寫(xiě)模塊,具體用于:將打印的日志依次寫(xiě)至所述第二預(yù)設(shè)端口中。
可選地,所述第一設(shè)備,還包括:第一保存模塊、第二判斷模塊、清空模塊和第三判斷模塊;
所述第一保存模塊,用于將所述第一讀取模塊讀取到的日志保存至緩存中;
所述第二判斷模塊,用于判斷所述緩存中日志的長(zhǎng)度是否小于預(yù)設(shè)長(zhǎng)度;
所述第一發(fā)送模塊,具體用于:當(dāng)所述第二判斷模塊判斷出所述緩存中日志的長(zhǎng)度不小于預(yù)設(shè)長(zhǎng)度時(shí),將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述清空模塊,用于所述第一發(fā)送模塊將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器之后,將所述緩存清空;
所述第一讀取模塊,還用于當(dāng)所述第二判斷模塊判斷出所述緩存中日志的長(zhǎng)度小于預(yù)設(shè)長(zhǎng)度時(shí),等待并讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第三判斷模塊,用于當(dāng)所述第一判斷模塊判斷出所述第一讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),判斷所述緩存中是否有日志;
所述第一發(fā)送模塊,還用于當(dāng)所述第三判斷模塊判斷出所述緩存中有日志時(shí),將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器。
可選地,所述第一設(shè)備,還包括:第二連接模塊和第一斷開(kāi)模塊;
所述第二連接模塊,用于所述第一發(fā)送模塊將所述第一讀取模塊讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的所述遠(yuǎn)程服務(wù)器之前,與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
所述第一發(fā)送模塊,具體用于:將所述第一讀取模塊讀取到的日志發(fā)送至所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
所述第一斷開(kāi)模塊,用于所述第一發(fā)送模塊觸發(fā)所述第一讀取模塊之前,關(guān)閉所述第三預(yù)設(shè)端口,并斷開(kāi)與所述遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,所述第一設(shè)備,還包括:第三連接模塊和第二斷開(kāi)模塊;
所述第三連接模塊,用于所述第一讀取模塊等待并讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù)之前,與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
所述第一發(fā)送模塊,具體用于:將所述第一讀取模塊讀取到的日志發(fā)送至所述遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
所述第二斷開(kāi)模塊,用于當(dāng)所述第一判斷模塊判斷出所述第一讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),關(guān)閉所述第三預(yù)設(shè)端口,并斷開(kāi)與所述遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,所述第一設(shè)備,還包括:第四連接模塊、第二保存模塊、第四判斷模塊和第二發(fā)送模塊;
所述第二保存模塊,用于當(dāng)所述第一發(fā)送模塊將讀取到的日志發(fā)送失敗時(shí),將讀取到的日志保存;
所述第四連接模塊,用于所述第二保存模塊將讀取到的日志保存之后,每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接;
所述第四判斷模塊,用于判斷所述第四連接模塊是否連接成功;
所述第二發(fā)送模塊,用于當(dāng)所述第四判斷模塊判斷出所述第四連接模塊連接成功時(shí),將所述第二保存模塊保存的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述第一讀取模塊,還用于所述第二發(fā)送模塊將所述第二保存模塊保存的日志發(fā)送給所述遠(yuǎn)程服務(wù)器之后,等待并讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第四連接模塊,還用于當(dāng)所述第四判斷模塊判斷出所述第四連接模塊連接不成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接。
可選地,所述第一設(shè)備,還包括:第三保存模塊、第二讀取模塊、第五判斷模塊、第五連接模塊、第六判斷模塊、第三發(fā)送模塊和第七判斷模塊;
所述第三保存模塊,用于當(dāng)所述第一發(fā)送模塊將讀取到的日志發(fā)送失敗時(shí),將讀取到的日志保存至緩存中;
所述第二讀取模塊,用于所述第三保存模塊將讀取到的日志保存至緩存中之后,讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第五判斷模塊,用于判斷所述第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型;
所述第三保存模塊,還用于當(dāng)所述第五判斷模塊判斷出所述第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為日志時(shí),將所述第二讀取模塊讀取到的日志保存至緩存中;
所述第五連接模塊,用于所述第三保存模塊將所述第二讀取模塊讀取到的日志保存至緩存中之后,與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接;
所述第六判斷模塊,用于判斷所述第五連接模塊是否連接成功;
所述第三發(fā)送模塊,用于當(dāng)所述第六判斷模塊判斷出所述第五連接模塊連接成功時(shí),將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述第一讀取模塊,還用于所述第三發(fā)送模塊將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器之后,讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第二讀取模塊,還用于當(dāng)所述第六判斷模塊判斷出所述第五連接模塊連接不成功時(shí),讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第五連接模塊,還用于當(dāng)所述第五判斷模塊判斷出所述第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接;
所述第七判斷模塊,用于判斷所述第五連接模塊是否連接成功;
所述第三發(fā)送模塊,還用于當(dāng)所述第七判斷模塊判斷出所述第五連接模塊連接成功時(shí),將所述緩存中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述第五連接模塊,還用于當(dāng)所述第七判斷模塊判斷出所述第五連接模塊不連接成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接。
可選地,所述第一設(shè)備,還包括:建立模塊、第四保存模塊、第三讀取模塊、第八判斷模塊、第六連接模塊、第九判斷模塊、第四發(fā)送模塊、第十判斷模塊和第十一判斷模塊;
所述建立模塊,用于當(dāng)所述第一發(fā)送模塊將讀取到的日志發(fā)送失敗時(shí),新建臨時(shí)文件;
所述第四保存模塊,用于將所述第一讀取模塊讀取到的日志保存至所述臨時(shí)文件中;
所述第三讀取模塊,用于所述第四保存模塊將所述第一讀取模塊讀取到的日志保存至所述臨時(shí)文件中之后,讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第八判斷模塊,用于判斷所述第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型;
所述第四保存模塊,還用于當(dāng)所述第八判斷模塊判斷出所述第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為日志時(shí),將所述第三讀取模塊讀取到的日志保存至所述臨時(shí)文件中;
所述第六連接模塊,用于所述第四保存模塊將所述第三讀取模塊讀取到的日志保存至所述臨時(shí)文件中之后,與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接;
所述第九判斷模塊,用于判斷所述第六連接模塊是否連接成功;
所述第四發(fā)送模塊,用于當(dāng)所述第九判斷模塊判斷出所述第六連接模塊連接成功時(shí),將所述臨時(shí)文件發(fā)送給所述遠(yuǎn)程服務(wù)器;或者將所述臨時(shí)文件中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述第一讀取模塊,還用于當(dāng)所述第四發(fā)送模塊將所述臨時(shí)文件發(fā)送給所述遠(yuǎn)程服務(wù)器之后,讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);或者當(dāng)所述第四發(fā)送模塊將所述臨時(shí)文件中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器之后,讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第三讀取模塊,還用于當(dāng)所述第九判斷模塊判斷出所述第六連接模塊連接不成功時(shí),讀取所述第一預(yù)設(shè)端口中的數(shù)據(jù);
所述第六連接模塊,還用于當(dāng)所述第八判斷模塊判斷出所述第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接;
所述第十判斷模塊,用于判斷所述第六連接模塊是否連接成功;
所述第四發(fā)送模塊,還用于當(dāng)所述第十判斷模塊判斷出所述第六連接模塊連接成功時(shí),將所述臨時(shí)文件發(fā)送給所述遠(yuǎn)程服務(wù)器;或者將所述臨時(shí)文件中的日志發(fā)送給所述遠(yuǎn)程服務(wù)器;
所述第六連接模塊,還用于當(dāng)所述第十判斷模塊判斷出所述第六連接模塊連接不成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與所述遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接。
可選地,所述定向模塊,具體用于:執(zhí)行第一指令將所述第二設(shè)備的第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
本發(fā)明中的技術(shù)方案,在遠(yuǎn)程日志獲取過(guò)程中,不但部署方便,易于用戶(hù)操作,而且可以提高日志獲取效率,利于有效的跟蹤解決問(wèn)題。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一提供的一種遠(yuǎn)程日志獲取方法中第一設(shè)備的操作流程圖;
圖2為本發(fā)明實(shí)施例一提供的一種遠(yuǎn)程日志獲取方法中第二設(shè)備的操作流程圖;
圖3為本發(fā)明實(shí)施例二提供的一種遠(yuǎn)程日志獲取方法中第一設(shè)備的操作流程圖;
圖4為本發(fā)明實(shí)施例三提供的一種遠(yuǎn)程日志獲取方法中第一設(shè)備的操作流程圖;
圖5為本發(fā)明實(shí)施例四提供的一種遠(yuǎn)程日志獲取系統(tǒng)的模塊組成框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整的描述;顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明中的技術(shù)方案應(yīng)用于包含第二設(shè)備、第一設(shè)備和遠(yuǎn)程服務(wù)器構(gòu)成的系統(tǒng)中;其中,第二設(shè)備與第一設(shè)備之間為USB連接,第一設(shè)備與遠(yuǎn)程服務(wù)器之間為網(wǎng)絡(luò)連接。在本發(fā)明中,第二設(shè)備,具體為不具備網(wǎng)絡(luò)連接功能的設(shè)備,或者具備網(wǎng)絡(luò)連接功能但是網(wǎng)絡(luò)連接功能被禁用的設(shè)備,例如,第二設(shè)備為生產(chǎn)工具;第一設(shè)備,具體為擁有USB接口的移動(dòng)設(shè)備,例如,第一設(shè)備為手機(jī)、平板電腦等,其接入簡(jiǎn)單,易于用戶(hù)操作。
實(shí)施例一
本發(fā)明實(shí)施例一提供一種遠(yuǎn)程日志獲取方法,如圖1和圖2所示:
第一設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟101:第一設(shè)備等待并讀取自身第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟102;如為結(jié)束標(biāo)識(shí),則結(jié)束;
步驟102:第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,返回步驟101;
第二設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟103:第二設(shè)備與第一設(shè)備建立非網(wǎng)絡(luò)連接,并將自身的第二預(yù)設(shè)端口重定向到第一設(shè)備的第一預(yù)設(shè)端口;
步驟104:第二設(shè)備將打印的日志寫(xiě)至第二預(yù)設(shè)端口中。
在本實(shí)施例中,步驟101之前,還包括:第一設(shè)備打開(kāi)自身的第一預(yù)設(shè)端口。
在本實(shí)施例中,步驟104,具體為:第二設(shè)備依次將打印的日志寫(xiě)至第二預(yù)設(shè)端口中;
相應(yīng)地,步驟102中,第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體為:第一設(shè)備將讀取到的一條日志或者一段日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器;
在本實(shí)施例中,步驟102中,第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,還可以具體為:
步驟n1:第一設(shè)備將讀取到的日志保存至緩存中,并判斷緩存中日志的長(zhǎng)度是否小于預(yù)設(shè)長(zhǎng)度,是則返回步驟101;否則執(zhí)行步驟n2;
步驟n2:第一設(shè)備將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器,并將緩存清空;
所述步驟101中,當(dāng)?shù)谝辉O(shè)備判斷出讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),還包括:
步驟m:第一設(shè)備判斷緩存中是否有日志,是則將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器,并將緩存清空,結(jié)束;否則,結(jié)束。
可選地,在本實(shí)施例中,步驟102之前,還包括:
第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
相應(yīng)地,步驟102中,第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體為:第一設(shè)備將讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
步驟102中,返回步驟101之前,還包括:第一設(shè)備關(guān)閉遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,步驟101之前,還包括:
第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
相應(yīng)地,步驟102中,第一設(shè)備將讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器,具體為:第一設(shè)備將讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口中;
步驟102中,當(dāng)?shù)谝辉O(shè)備判斷出讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),還包括:第一設(shè)備關(guān)閉遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,步驟102中,當(dāng)?shù)谝辉O(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟a1;
步驟a1:第一設(shè)備將讀取到的日志保存;
步驟a2:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將保存的日志發(fā)送給遠(yuǎn)程服務(wù)器,返回步驟101;否則繼續(xù)執(zhí)行步驟a2。
可選地,在本實(shí)施例中,步驟102中,當(dāng)?shù)谝辉O(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟b1;
步驟b1:第一設(shè)備將讀取到的日志保存至緩存中;
步驟b2:第一設(shè)備讀取自身的第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至緩存中,執(zhí)行步驟b3;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟b4;
步驟b3:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器,返回步驟101;否則返回步驟b2;
步驟b4:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器,結(jié)束;否則繼續(xù)執(zhí)行步驟b4。
可選地,在本實(shí)施例中,步驟102中,當(dāng)?shù)谝辉O(shè)備將讀取到的日志發(fā)送失敗時(shí),執(zhí)行步驟c1;
步驟c1:第一設(shè)備新建臨時(shí)文件,將讀取到的日志保存至臨時(shí)文件中;
步驟c2:第一設(shè)備讀取自身的第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至臨時(shí)文件中,執(zhí)行步驟c3;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟c4;
步驟c3:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則將臨時(shí)文件發(fā)送給遠(yuǎn)程服務(wù)器,返回步驟101;或者將臨時(shí)文件中的日志發(fā)送給遠(yuǎn)程服務(wù)器,返回步驟101;否則返回步驟c2;
步驟c4:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則將臨時(shí)文件發(fā)送給遠(yuǎn)程服務(wù)器,結(jié)束;或者將臨時(shí)文件中的日志發(fā)送給遠(yuǎn)程服務(wù)器,結(jié)束;否則繼續(xù)執(zhí)行步驟c4。
進(jìn)一步地,步驟103中,第二設(shè)備與第一設(shè)備建立非網(wǎng)絡(luò)連接,具體為:第二設(shè)備調(diào)用第一函數(shù)接口打開(kāi)自身的第二預(yù)設(shè)端口,并在第二預(yù)設(shè)端口與第一設(shè)備的第一預(yù)設(shè)端口之間建立非網(wǎng)絡(luò)連接;
在本實(shí)施例中,第一函數(shù)接口具體為:open-tcp-client 8090;其中,8090為第一預(yù)設(shè)端口的端口號(hào)。
需要說(shuō)明地,在本實(shí)施例中,第二設(shè)備和第一設(shè)備可以同時(shí)啟動(dòng),也可以不同時(shí)啟動(dòng);當(dāng)?shù)诙O(shè)備與第一設(shè)備建立非網(wǎng)絡(luò)連接時(shí),如第一設(shè)備尚未啟動(dòng),則第二設(shè)備調(diào)用第一函數(shù)接口后能夠打開(kāi)本地的第二預(yù)設(shè)端口,但與第一預(yù)設(shè)端口建立連接失敗。
更進(jìn)一步地,步驟103中,第二設(shè)備將自身的第二預(yù)設(shè)端口重定向到第一設(shè)備的第一預(yù)設(shè)端口,具體為:第二設(shè)備執(zhí)行第一指令將自身的第二預(yù)設(shè)端口重定向到所述第一設(shè)備的第一預(yù)設(shè)端口;
在本實(shí)施例中,第一指令具體為:shell-command“./adb forward tcp:8070tcp:8090”;其中,tcp:8070表示第二預(yù)設(shè)端口的端口號(hào)為8070,tcp:8090表示第一預(yù)設(shè)端口的端口號(hào)為8090。
實(shí)施例二
本發(fā)明實(shí)施例二提供一種遠(yuǎn)程日志獲取方法,其中,第二設(shè)備的操作方法與實(shí)施例一中所述的第二設(shè)備的操作方法相同,在本實(shí)施例中不在贅述;
如圖3所示,第一設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟301:第一設(shè)備打開(kāi)自身的第一預(yù)設(shè)端口;
具體地,第一設(shè)備調(diào)用第二函數(shù)接口打開(kāi)自身的第一預(yù)設(shè)端口;
在本實(shí)施例中,第二函數(shù)接口為:open-tcp-server 8090;其中,8090為第一預(yù)設(shè)端口的端口號(hào)。
步驟302:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟307;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟303;
具體地,第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔檢測(cè)第一預(yù)設(shè)端口中是否有數(shù)據(jù),是則調(diào)用第三函數(shù)接口讀取第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)是否為預(yù)設(shè)字符,是則確認(rèn)讀取到的數(shù)據(jù)為結(jié)束標(biāo)識(shí),執(zhí)行步驟303;否則,確認(rèn)讀取到的數(shù)據(jù)為日志,執(zhí)行步驟307;
在本實(shí)施例中,第三函數(shù)接口具體為:(read-line p);其中,參數(shù)p具體為第一預(yù)設(shè)端口;
優(yōu)選地,在本實(shí)施例中,預(yù)設(shè)時(shí)間間隔為10秒;預(yù)設(shè)字符為#!eof。
步驟303:第一設(shè)備判斷當(dāng)前緩存中是否有日志,是則執(zhí)行步驟304;否則,結(jié)束;
步驟304:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
具體地,第一設(shè)備調(diào)用第四函數(shù)接口與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
在本實(shí)施例中,第四函數(shù)接口為:open-tcp-server 192.168.24.1:8050,其中192.168.24.1為第三預(yù)設(shè)端口的IP地址,8050為第三預(yù)設(shè)端口的端口號(hào)。
步驟305:第一設(shè)備將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),將第三預(yù)設(shè)端口關(guān)閉并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接,執(zhí)行步驟306;
具體地,第一設(shè)備調(diào)用第五函數(shù)接口將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,并調(diào)用第六函數(shù)接口將第三預(yù)設(shè)端口關(guān)閉,斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接;
在本實(shí)施例中,第五函數(shù)接口具體為:write-subu8vector data 0datalen p;其中參數(shù)subu8vector data為緩存中的日志,參數(shù)p為第三預(yù)設(shè)端口;
第六函數(shù)接口具體為:close-port p;其中,參數(shù)p為第一預(yù)設(shè)端口。
步驟306:第一設(shè)備將緩存清空,結(jié)束;
在本實(shí)施例中,如需繼續(xù)獲取日志,則將緩存清空后,返回步驟302。
步驟307:第一設(shè)備將讀取到的日志作為當(dāng)前日志保存至緩存中;
步驟308:第一設(shè)備計(jì)算當(dāng)前緩存中日志的長(zhǎng)度,并判斷是否小于預(yù)設(shè)長(zhǎng)度,是則返回步驟302;否則執(zhí)行步驟309;
在本實(shí)施例中,第一設(shè)備計(jì)算當(dāng)前緩存中日志的長(zhǎng)度,具體為:第一設(shè)備調(diào)用第七函數(shù)接口計(jì)算緩存中日志的長(zhǎng)度;
在本實(shí)施例中,第七函數(shù)接口具體為:u8vector-length u8vector;其中,參數(shù)u8vector具體為緩存中的日志。
優(yōu)選地,在本實(shí)施例中,預(yù)設(shè)長(zhǎng)度為800字節(jié);
進(jìn)一步地,在本實(shí)施例中,第一設(shè)備啟動(dòng)之后,還可以包括:第一設(shè)備初始化計(jì)數(shù)標(biāo)識(shí)為初始值;優(yōu)選地,初始值為0;
相應(yīng)地,步驟308具體為:第一設(shè)備根據(jù)當(dāng)前日志的長(zhǎng)度更新計(jì)數(shù)標(biāo)識(shí),并判斷計(jì)數(shù)標(biāo)識(shí)當(dāng)前的計(jì)數(shù)值是否小于預(yù)設(shè)值,是則返回步驟302,否則執(zhí)行步驟309;
優(yōu)選地,預(yù)設(shè)值為800。
步驟309:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
具體地,第一設(shè)備調(diào)用上述第四函數(shù)接口與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第一預(yù)設(shè)端口。
步驟310:第一設(shè)備將當(dāng)前緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),將第三預(yù)設(shè)端口關(guān)閉并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接;
具體地,第一設(shè)備調(diào)用上述第五函數(shù)接口將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,并調(diào)用上述第六函數(shù)接口將第三預(yù)設(shè)端口關(guān)閉,斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接。
步驟311:第一設(shè)備將緩存清空,返回步驟302。
在本實(shí)施例中,當(dāng)遠(yuǎn)程服務(wù)器接收到日志后,還包括:遠(yuǎn)程服務(wù)器將接收到的日志保存至數(shù)據(jù)庫(kù)中;當(dāng)用戶(hù)需要通過(guò)遠(yuǎn)程服務(wù)器查閱第一設(shè)備的日志時(shí),遠(yuǎn)程服務(wù)器將數(shù)據(jù)庫(kù)中的日志打印至預(yù)設(shè)網(wǎng)頁(yè)中。
進(jìn)一步地,在本實(shí)施例中,第一設(shè)備還可以每讀取到一條日志,便將讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
相應(yīng)地,步驟302至步驟312,替換為:
步驟302`:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟303`;如為結(jié)束標(biāo)識(shí),則結(jié)束;
在本實(shí)施例中,判斷出讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),如需繼續(xù)獲取日志,則繼續(xù)執(zhí)行步驟302。
步驟303`:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
步驟304`:第一設(shè)備將讀取到的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),將第三預(yù)設(shè)端口關(guān)閉,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接,返回步驟302`。
更進(jìn)一步地,在本實(shí)施例中,當(dāng)上述獲取遠(yuǎn)程日志的過(guò)程中,在步驟305和步驟310中,第一設(shè)備將日志發(fā)送失敗時(shí),第一設(shè)備可以執(zhí)行以下操作:
具體地,當(dāng)步驟305中,第一設(shè)備將日志發(fā)送失敗時(shí),執(zhí)行步驟A;
步驟A:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中,結(jié)束;否則,繼續(xù)執(zhí)行步驟A。
當(dāng)步驟309中,第一設(shè)備將日志發(fā)送失敗時(shí),執(zhí)行步驟B;
步驟B:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將緩存中的日志發(fā)送給打開(kāi)的第三預(yù)設(shè)端口中,當(dāng)發(fā)送完成時(shí),將第三預(yù)設(shè)端口關(guān)閉并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接,執(zhí)行步驟311;否則,繼續(xù)執(zhí)行步驟B。
當(dāng)步驟309中,第一設(shè)備將日志發(fā)送失敗時(shí),還可以執(zhí)行步驟D1;
步驟D1:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至緩存中,執(zhí)行步驟D2;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟D3;
步驟D2:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中,返回步驟302;否則返回步驟D1;
步驟D3:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中,結(jié)束;否則繼續(xù)執(zhí)行步驟D3。
其中,將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中,可以為依次從緩存中讀取預(yù)設(shè)長(zhǎng)度的日志,并將讀取到的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中;還可以為將緩存中的全部日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口中。
當(dāng)步驟309中,第一設(shè)備將日志發(fā)送失敗時(shí),還可以執(zhí)行步驟F1;
步驟F1:第一設(shè)備新建臨時(shí)文件,并將緩存中的日志保存至臨時(shí)文件中;
步驟F2:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則將讀取到的日志保存至臨時(shí)文件中,執(zhí)行步驟F3;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟F4;
步驟F3:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將臨時(shí)文件發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,返回步驟302;或者將臨時(shí)文件中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,返回步驟302;否則返回步驟F2;
步驟F4:第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔與服務(wù)器建立網(wǎng)絡(luò)連接,并判斷是否連接成功,是則打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口,并將臨時(shí)文件發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,結(jié)束;或者將臨時(shí)文件中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,結(jié)束;否則繼續(xù)執(zhí)行步驟F4。
在本實(shí)施例中,當(dāng)?shù)谝辉O(shè)備每讀取到一條日志便將讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口時(shí),相應(yīng)地,在步驟304`中,第一設(shè)備將日志發(fā)送失敗時(shí),則第一設(shè)備將讀取到的日志保存,并執(zhí)行步驟B,或者執(zhí)行步驟D1,或者執(zhí)行步驟F1。
本實(shí)施例中,還設(shè)置有異常處理函數(shù),當(dāng)上述獲取遠(yuǎn)程日志的過(guò)程中出現(xiàn)異常時(shí),異常處理函數(shù)能夠抓取到異常事件并跳轉(zhuǎn),防止整個(gè)系統(tǒng)的崩潰。
實(shí)施例三
本發(fā)明實(shí)施例三提供一種遠(yuǎn)程日志獲取方法;其中,第二設(shè)備的操作方法與實(shí)施例一中所述的第二設(shè)備的操作方法相同,在本實(shí)施例中不在贅述;
如圖4所示,第一設(shè)備啟動(dòng)之后,執(zhí)行以下操作:
步驟401:第一設(shè)備打開(kāi)自身的第一預(yù)設(shè)端口;
具體地,第一設(shè)備調(diào)用第二函數(shù)接口打開(kāi)自身的第一預(yù)設(shè)端口;
在本實(shí)施例中,第二函數(shù)接口為:open-tcp-server 8090;其中,8090為第一預(yù)設(shè)端口的端口號(hào)。
步驟402:第一設(shè)備與遠(yuǎn)程服務(wù)器建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第一預(yù)設(shè)端口;
具體地,第一設(shè)備調(diào)用第四函數(shù)接口在自身的第一預(yù)設(shè)端口與遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口之間建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
在本實(shí)施例中,第四函數(shù)接口具體為:open-tcp-server 192.168.24.1:8050,其中192.168.24.1為第一預(yù)設(shè)端口的IP地址,8050為第一預(yù)設(shè)端口的端口號(hào)。
步驟403:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟404;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟408;
具體地,第一設(shè)備每隔預(yù)設(shè)時(shí)間間隔檢測(cè)第一預(yù)設(shè)端口中是否有數(shù)據(jù),是則調(diào)用第三函數(shù)接口讀取第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)是否為預(yù)設(shè)字符,是則確認(rèn)讀取到的數(shù)據(jù)為結(jié)束標(biāo)識(shí),執(zhí)行步驟404;否則,確認(rèn)讀取到的數(shù)據(jù)為日志,執(zhí)行步驟408;
在本實(shí)施例中,第三函數(shù)接口具體為:(read-line p);其中,參數(shù)p具體為第一預(yù)設(shè)端口;
優(yōu)選地,在本實(shí)施例中,預(yù)設(shè)時(shí)間間隔為10秒;預(yù)設(shè)字符為#!eof。
步驟404:第一設(shè)備將讀取到的日志作為當(dāng)前日志保存至緩存中;
步驟405:第一設(shè)備計(jì)算當(dāng)前緩存中日志的長(zhǎng)度,并判斷是否小于預(yù)設(shè)長(zhǎng)度,是則返回步驟402;否則執(zhí)行步驟406;
在本實(shí)施例中,第一設(shè)備計(jì)算當(dāng)前緩存中日志的長(zhǎng)度,具體為:第一設(shè)備調(diào)用第七函數(shù)接口計(jì)算當(dāng)前緩存中日志的長(zhǎng)度;
在本實(shí)施例中,第七函數(shù)接口具體為:u8vector-length u8vector;其中參數(shù)u8vector具體為緩存中的日志;
優(yōu)選地,預(yù)設(shè)長(zhǎng)度為800字節(jié)。
進(jìn)一步地,在本實(shí)施例中,第一設(shè)備啟動(dòng)之后,還可以包括:第一設(shè)備初始化計(jì)數(shù)標(biāo)識(shí)為初始值;優(yōu)選地,初始值為0;
相應(yīng)地,步驟405具體為:第一設(shè)備根據(jù)當(dāng)前日志的長(zhǎng)度更新計(jì)數(shù)標(biāo)識(shí),并判斷計(jì)數(shù)標(biāo)識(shí)當(dāng)前的計(jì)數(shù)值是否小于預(yù)設(shè)值,是則返回步驟402,否則執(zhí)行步驟406;
優(yōu)選地,預(yù)設(shè)值為800。
步驟406:第一設(shè)備將當(dāng)前緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),執(zhí)行步驟407;
具體地,第一設(shè)備調(diào)用第五函數(shù)接口將當(dāng)前緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口;
在本實(shí)施例中,第五函數(shù)接口具體為:write-subu8vector data 0datalen p;其中,參數(shù)subu8vector data為緩存中的日志,參數(shù)p為第一預(yù)設(shè)端口。
步驟407:第一設(shè)備將緩存清空,返回步驟402;
步驟408:第一設(shè)備判斷當(dāng)前緩存中是否有日志,是則將緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),執(zhí)行步驟409;
具體地,第一設(shè)備調(diào)用上述第五函數(shù)接口將當(dāng)前緩存中的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口。
步驟409:第一設(shè)備將第三預(yù)設(shè)端口關(guān)閉,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接,結(jié)束。
具體地,第一設(shè)備調(diào)用第六函數(shù)接口將第三預(yù)設(shè)端口關(guān)閉,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接;
在本實(shí)施例中,第六函數(shù)接口具體為:close-port p,其中參數(shù)p為第一預(yù)設(shè)端口。
在本實(shí)施例中,當(dāng)遠(yuǎn)程服務(wù)器接收到日志后,還包括:遠(yuǎn)程服務(wù)器將接收到的日志保存至數(shù)據(jù)庫(kù)中;當(dāng)用戶(hù)需要通過(guò)遠(yuǎn)程服務(wù)器查閱第一設(shè)備的日志時(shí),遠(yuǎn)程服務(wù)器將數(shù)據(jù)庫(kù)中的日志打印至預(yù)設(shè)網(wǎng)頁(yè)中。
進(jìn)一步地,在本實(shí)施例中,第一設(shè)備可以每讀取到一條日志,便將讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器的第三預(yù)設(shè)端口;
相應(yīng)地,步驟403至步驟409,替換為:
步驟403`:當(dāng)?shù)谝辉O(shè)備檢測(cè)到第一預(yù)設(shè)端口中有數(shù)據(jù)時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù),并判斷讀取到的數(shù)據(jù)的類(lèi)型,如為日志,則執(zhí)行步驟404`;如為結(jié)束標(biāo)識(shí),則執(zhí)行步驟405`;
步驟404`:第一設(shè)備將讀取到的日志發(fā)送至打開(kāi)的第三預(yù)設(shè)端口,當(dāng)發(fā)送完成時(shí),返回步驟403`;
步驟405`:第一設(shè)備關(guān)閉第三預(yù)設(shè)端口,并斷開(kāi)與遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)連接,結(jié)束。
更進(jìn)一步地,在本實(shí)施例中,當(dāng)步驟406中,第一設(shè)備將緩存中的日志發(fā)送失敗時(shí),則第一設(shè)備執(zhí)行實(shí)施例二中所述的步驟B,或者步驟D1,或者步驟F1;
當(dāng)步驟408中,第一設(shè)備將緩存中的日志發(fā)送失敗時(shí),則第一設(shè)備執(zhí)行實(shí)施例二中所述的步驟A。
在本實(shí)施例中,還設(shè)置有異常處理函數(shù),當(dāng)上述獲取遠(yuǎn)程日志的過(guò)程中出現(xiàn)異常時(shí),異常處理函數(shù)能夠抓取到異常事件并跳轉(zhuǎn),防止整個(gè)系統(tǒng)的崩潰。
實(shí)施例四
本發(fā)明實(shí)施例四提供一種遠(yuǎn)程日志獲取系統(tǒng),如圖5所示,包括:第一設(shè)備50、第二設(shè)備60和遠(yuǎn)程服務(wù)器70;
其中,第一設(shè)備50包括:第一讀取模塊501、第一判斷模塊502和第一發(fā)送模塊503;
第一讀取模塊501,用于讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第一判斷模塊502,用于判斷第一讀取模塊501讀取到的數(shù)據(jù)的類(lèi)型;
第一發(fā)送模塊503,用于當(dāng)?shù)谝慌袛嗄K502判斷出第一讀取模塊501讀取到的數(shù)據(jù)為日志時(shí),將第一讀取模塊501讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器70;
第二設(shè)備60包括:第一連接模塊601、定向模塊602和寫(xiě)模塊603;
其中,第一連接模塊601,用于與第一設(shè)備50建立非網(wǎng)絡(luò)連接;
定向模塊602,用于將第二預(yù)設(shè)端口重定向到第一設(shè)備50的第一預(yù)設(shè)端口;
寫(xiě)模塊603,用于將打印的日志寫(xiě)至第二預(yù)設(shè)端口中。
在本實(shí)施例中,第一設(shè)備50還包括:打開(kāi)模塊;
其中,打開(kāi)模塊,用于第一讀取模塊501讀取第一預(yù)設(shè)端口中的數(shù)據(jù)之前,打開(kāi)第一預(yù)設(shè)端口。
在本實(shí)施例中,寫(xiě)模塊603,具體用于:將打印的日志依次寫(xiě)至第二預(yù)設(shè)端口中。
在本實(shí)施例中,第一設(shè)備50,還包括:第一保存模塊、第二判斷模塊、清空模塊和第三判斷模塊;
其中,第一保存模塊,用于將第一讀取模塊501讀取到的日志保存至緩存中;
第二判斷模塊,用于判斷緩存中日志的長(zhǎng)度是否小于預(yù)設(shè)長(zhǎng)度;
第一發(fā)送模塊503,具體用于:當(dāng)?shù)诙袛嗄K判斷出緩存中日志的長(zhǎng)度不小于預(yù)設(shè)長(zhǎng)度時(shí),將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
清空模塊,用于第一發(fā)送模塊503將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70之后,將緩存清空;
第一讀取模塊501,還用于當(dāng)?shù)诙袛嗄K判斷出緩存中日志的長(zhǎng)度小于預(yù)設(shè)長(zhǎng)度時(shí),等待并讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第三判斷模塊,用于當(dāng)?shù)谝慌袛嗄K502判斷出第一讀取模塊501讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),判斷緩存中是否有日志;
第一發(fā)送模塊503,還用于當(dāng)?shù)谌袛嗄K判斷出緩存中有日志時(shí),將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70。
可選地,在本實(shí)施例中,第一設(shè)備50,還包括:第二連接模塊和第一斷開(kāi)模塊;
其中,第二連接模塊,用于第一發(fā)送模塊503將第一讀取模塊501讀取到的日志發(fā)送給通過(guò)網(wǎng)絡(luò)連接的遠(yuǎn)程服務(wù)器70之前,與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器70的第三預(yù)設(shè)端口;
第一發(fā)送模塊503,具體用于:將第一讀取模塊501讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器70的第三預(yù)設(shè)端口中;
第一斷開(kāi)模塊,用于第一發(fā)送模塊503觸發(fā)第一讀取模塊501之前,關(guān)閉第三預(yù)設(shè)端口,并斷開(kāi)與遠(yuǎn)程服務(wù)器70的網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,第一設(shè)備50,還包括:第三連接模塊和第二斷開(kāi)模塊;
其中,第三連接模塊,用于第一讀取模塊501等待并讀取第一預(yù)設(shè)端口中的數(shù)據(jù)之前,與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接,并打開(kāi)遠(yuǎn)程服務(wù)器70的第三預(yù)設(shè)端口;
第一發(fā)送模塊503,具體用于:將第一讀取模塊501讀取到的日志發(fā)送至遠(yuǎn)程服務(wù)器70的第三預(yù)設(shè)端口中;
第二斷開(kāi)模塊,用于當(dāng)?shù)谝慌袛嗄K502判斷出第一讀取模塊501讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),關(guān)閉第三預(yù)設(shè)端口,并斷開(kāi)與遠(yuǎn)程服務(wù)器70的網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,第一設(shè)備50,還包括:第四連接模塊、第二保存模塊、第四判斷模塊和第二發(fā)送模塊;
其中,第二保存模塊,用于當(dāng)?shù)谝话l(fā)送模塊503將讀取到的日志發(fā)送失敗時(shí),將讀取到的日志保存;
第四連接模塊,用于第二保存模塊將讀取到的日志保存之后,每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接;
第四判斷模塊,用于判斷第四連接模塊是否連接成功;
第二發(fā)送模塊,用于當(dāng)?shù)谒呐袛嗄K判斷出第四連接模塊連接成功時(shí),將第二保存模塊保存的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
第一讀取模塊501,還用于第二發(fā)送模塊將第二保存模塊保存的日志發(fā)送給遠(yuǎn)程服務(wù)器70之后,等待并讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第四連接模塊,還用于當(dāng)?shù)谒呐袛嗄K判斷出第四連接模塊連接不成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,第一設(shè)備50,還包括:第三保存模塊、第二讀取模塊、第五判斷模塊、第五連接模塊、第六判斷模塊、第三發(fā)送模塊和第七判斷模塊;
第三保存模塊,用于當(dāng)?shù)谝话l(fā)送模塊503將第一讀取模塊501讀取到的日志發(fā)送失敗時(shí),將讀取到的日志保存至緩存中;
第二讀取模塊,用于第三保存模塊將第一讀取模塊501讀取到的日志保存至緩存中之后,讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第五判斷模塊,用于判斷第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型;
第三保存模塊,還用于當(dāng)?shù)谖迮袛嗄K判斷出第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為日志時(shí),將第二讀取模塊讀取到的日志保存至緩存中;
第五連接模塊,用于第三保存模塊將第二讀取模塊讀取到的日志保存至緩存中之后,與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接;
第六判斷模塊,用于判斷第五連接模塊是否連接成功;
第三發(fā)送模塊,用于當(dāng)?shù)诹袛嗄K判斷出第五連接模塊連接成功時(shí),將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
第一讀取模塊501,還用于第三發(fā)送模塊將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70之后,讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第二讀取模塊,還用于當(dāng)?shù)诹袛嗄K判斷出第五連接模塊連接不成功時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第五連接模塊,還用于當(dāng)?shù)谖迮袛嗄K判斷出第二讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接;
第七判斷模塊,用于判斷第五連接模塊是否連接成功;
第三發(fā)送模塊,還用于當(dāng)?shù)谄吲袛嗄K判斷出第五連接模塊連接成功時(shí),將緩存中的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
第五連接模塊,還用于當(dāng)?shù)谄吲袛嗄K判斷出第五連接模塊不連接成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接。
可選地,在本實(shí)施例中,第一設(shè)備50,還包括:建立模塊、第四保存模塊、第三讀取模塊、第八判斷模塊、第六連接模塊、第九判斷模塊、第四發(fā)送模塊、第十判斷模塊和第十一判斷模塊;
其中,建立模塊,用于當(dāng)?shù)谝话l(fā)送模塊503將第一讀取模塊501讀取到的日志發(fā)送失敗時(shí),新建臨時(shí)文件;
第四保存模塊,用于將第一讀取模塊501讀取到的日志保存至臨時(shí)文件中;
第三讀取模塊,用于第四保存模塊將第一讀取模塊501讀取到的日志保存至臨時(shí)文件中之后,讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第八判斷模塊,用于判斷第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型;
第四保存模塊,還用于當(dāng)?shù)诎伺袛嗄K判斷出第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為日志時(shí),將三讀取模塊讀取到的日志保存至臨時(shí)文件中;
第六連接模塊,用于第四保存模塊將第三讀取模塊讀取到的日志保存至臨時(shí)文件中之后,與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接;
第九判斷模塊,用于判斷述第六連接模塊是否連接成功;
第四發(fā)送模塊,用于當(dāng)?shù)诰排袛嗄K判斷出第六連接模塊連接成功時(shí),將臨時(shí)文件發(fā)送給遠(yuǎn)程服務(wù)器70;或者將臨時(shí)文件中的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
第一讀取模塊501,還用于當(dāng)?shù)谒陌l(fā)送模塊將臨時(shí)文件發(fā)送給遠(yuǎn)程服務(wù)器70之后,讀取第一預(yù)設(shè)端口中的數(shù)據(jù);或者當(dāng)?shù)谒陌l(fā)送模塊將臨時(shí)文件中的日志發(fā)送給遠(yuǎn)程服務(wù)器70之后,讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第三讀取模塊,還用于當(dāng)?shù)诰排袛嗄K判斷出第六連接模塊連接不成功時(shí),讀取第一預(yù)設(shè)端口中的數(shù)據(jù);
第六連接模塊,還用于當(dāng)?shù)诎伺袛嗄K判斷出第三讀取模塊讀取到的數(shù)據(jù)的類(lèi)型為結(jié)束標(biāo)識(shí)時(shí),每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接;
第十判斷模塊,用于判斷第六連接模塊是否連接成功;
第四發(fā)送模塊,還用于當(dāng)?shù)谑袛嗄K判斷出第六連接模塊連接成功時(shí),將臨時(shí)文件發(fā)送給遠(yuǎn)程服務(wù)器70;或者將臨時(shí)文件中的日志發(fā)送給遠(yuǎn)程服務(wù)器70;
第六連接模塊,還用于當(dāng)?shù)谑袛嗄K判斷出第六連接模塊連接不成功時(shí),每隔預(yù)設(shè)時(shí)間間隔與遠(yuǎn)程服務(wù)器70建立網(wǎng)絡(luò)連接。
在本實(shí)施例中,定向模塊602,具體用于:執(zhí)行第一指令將第二設(shè)備60的第二預(yù)設(shè)端口重定向到第一設(shè)備50的第一預(yù)設(shè)端口。
本發(fā)明中,第二設(shè)備與第一設(shè)備既相互關(guān)聯(lián),又相互獨(dú)立,當(dāng)任意一方出現(xiàn)問(wèn)題時(shí),不會(huì)導(dǎo)致另一方的崩潰,具有較好的穩(wěn)定性;并且當(dāng)遠(yuǎn)程服務(wù)器需要獲取第二設(shè)備的日志時(shí),第二設(shè)備的使用者將身邊的移動(dòng)設(shè)備(例如:手機(jī)、平板電腦等)作為第一設(shè)備,并通過(guò)USB線與第二設(shè)備連接,簡(jiǎn)單易做,提高了遠(yuǎn)程日志獲取效率,有利于及時(shí)有效的跟蹤解決問(wèn)題。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。