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