一種多進程的日志輸出方法,其中多進程包括主進程和與主進程進行交互的子進程。該方法首先通過主進程獲取子進程的日志信息和日志信息的時間戳。然后根據時間戳將子進程的日志信息進行緩存。最后,主進程獲取緩存的子進程的日志信息并輸出為日志文件。當應用程序有多個進程需要日志輸出時,多個子進程的日志信息先集中緩存于主進程中,并按照時間順序排列,最后輸出在一個日志文件內。因此,通過上述方法能夠將多進程的應用程序的日志進行統一輸出。此外,還提供一種多進程的日志輸出系統。
【技術實現步驟摘要】
多進程的日志輸出方法及系統
本專利技術涉及計算機技術,特別是涉及一種多進程的日志輸出方法及系統。
技術介紹
日志(LOG)記錄了應用程序在運行過程中的一些狀態信息,特別是出錯信息。借助日志可以快速跟蹤、定位到軟件出錯的位置,方便修復。因此,日志對于軟件開發者維護軟件來說,尤為重要。目前市面上的應用程序為了追求低耦合、高穩定性,在程序開發時采用的是多進程的架構。但是多進程的架構使輸出和管理日志便成為一個難題。一般的做法是各個進程都包含一個日志記錄模塊,每個日志記錄模塊單獨的輸出其所在進程的日志。這種方式的優點是原日志記錄模塊不需要修改,且處理過程簡單易行。但由于操作系統文件保護的關系,各進程的日志勢必不能高效的按時間順序統一輸出在同一個日志文件中,只能按所在進程生成多份日志文件。
技術實現思路
鑒于上述狀況,有必要提供一種能夠將多進程的應用程序的日志進行統一輸出的多進程的日志輸出方法。一種多進程的日志輸出方法,所述多進程包括主進程和與所述主進程進行交互的子進程,包括以下步驟: 通過所述主進程獲取子進程的日志信息和所述日志信息的時間戳;所述主進程根據所述時間戳將所述子進程的日志信息進行緩存;所述主進程獲取緩存的所述子進程的日志信息并輸出為日志文件。此外,還有必要提供一種能夠將多進程的應用程序的日志進行統一輸出的多進程的日志輸出系統,包括主進程模塊和子進程模塊,所述主進程模塊包括:通信模塊,用于獲取子進程的日志信息和所述日志信息的時間戳;緩存模塊,用于根據所述時間戳將所述子進程的日志信息進行緩存;及日志輸出模塊,用于獲取緩存的所述子進程的日志信息并輸出為日志文件。上述多進程的日志輸出方法及系統,首先通過主進程獲取子進程的日志信息和日志信息的時間戳,并根據時間戳將子進程的日志信息進行緩存;然后,主進程獲取緩存的子進程的日志信息并輸出為日志文件。當應用程序有多個進程需要日志輸出時,多個子進程的日志信息先集中緩存于主進程中,并按照時間順序排列,最后輸出在一個日志文件內。因此,通過上述方法及系統能夠將多進程的應用程序的日志進行統一輸出。附圖說明圖1為一實施例中多進程的日志輸出方法的流程示意圖;圖2為一實施例中通過主進程獲取子進程的日志信息和日志信息的時間戳的流程不意圖;圖3為主進程根據時間戳將子進程的日志信息進行緩存的流程示意圖;圖4為主進程根據時間戳將子進程的日志信息進行緩存的原理圖;圖5為一實施例中多進程的日志輸出系統的結構示意圖;圖6為一個實施例中通信模塊的結構示意圖;圖7為一個實施例中緩存模塊的結構示意圖;圖8為另一個實施例中多進程的日志輸出系統的結構示意圖。具體實施方式在多進程架構的應用程序中,多進程包括主進程和與主進程進行交互的多個子進程。如圖1所示,在一個實施例中,多進程的日志輸出方法包括以下步驟:步驟SI 10,通過主進程獲取子進程的日志信息和日志信息的時間戳。日志信息包括產生該日志信息的子進程的編號及進程名,以此表明該日志信息的來源。日志信息還包括日志內容,日志內容是日志信息的核心部分,用于記錄產生該日志信息的子進程的工作狀態、故障信息及運行參數等。時間戳中記錄了每個日志信息產生的時間。如圖2所示,在一個實施例中,上述步驟SllO具體包括以下步驟:步驟S111,主進程打開進程間通信通道。進程間通信通道即IPC (Inter-Process Communication,進程間通信)通道,兩個進程之間可通過IPC通道進行通信。進行進程間通信的方式有多種,例如Socket (套接字)、管道及共享內存。在一個實施例中,可采取共享內存的方式實現進程間的通信。步驟SI 13,接收子進程的進程間通信連接請求,與子進程建立通信通道。在一個實施例中,共享內存的創建和打開可采用了基于連接的客戶機/服務器模式(C/S)。主進程先啟動,打開進程間通信通道并監聽子進程的連接請求,當收到子進程發起請求時,則建立通信通道。在一個實施例中,當主進程接收到子進程的請求結束消息或監測到子進程斷開時,則關閉與所述子進程之間的進程間通信通道。為了釋放資源,當子進程正常退出時,主進程會收到子進程發送的請求結束消息,主進程收到請求結束消息后,關閉與該子進程之間的通信信道并釋放資源。為了保證通信的穩定,主進程對子進程的通信狀態進行實時監控,當子進程發生異常或崩潰時,主進程可檢測到子進程的連接異常,此時主進程雖然沒有收到該子進程的請求結束消息,也會主動關閉與該子進程之間的通信信道并釋放資源。步驟S115,通過通信通道接收子進程發送的日志信息和日志信息的時間戳。通信通道建立后,子進程和主進程之間實現進程間通信,主進程可通過通信通道獲取子進程的日志信息和日志信息的時間戳。步驟S120,主進程根據時間戳將子進程的日志信息進行緩存。如圖3所示,在一個實施例中,主進程的緩存包括等待隊列和完成隊列,上述步驟S120具體包括以下步驟:步驟S121,根據接收的順序將子進程的日志信息緩存于等待隊列中。主進程獲取的子進程的日志信息和日志信息的時間戳首先緩存于等待隊列中,子進程可隨時與主進程進行進程間通信,并隨時將產生的日志信息發送給主進程,日志信息在等待隊列中按照接收順序進行排列。步驟S123,根據時間戳將緩存于等待隊列中的子進程的日志信息按時間順序插入到完成隊列中。具體的,從等待序列中依次提取出日志信息,進一步的,可按照時間戳中記錄的日志信息的產生時間的先后順序提取日志信息,提取出來的日志信息依次插入到完成序列的尾部,從而形成按時間順序排列的日志信息。子進程的日志信息和日志信息的時間戳以“packet” (數據包)的形式在進程間傳遞,步驟S120的具體過程如圖4所示。采用上述雙隊列的方式接收和緩存日志信息可有效的提高接收個緩存日志信息的效率。因為當子進程的日志不斷地緩存于等待隊列的同時,等待隊列中的日志信息可不斷按照時間順序插入到完成序列中,二者協同工作。相對于單隊列方式,能夠避免可能發生的阻塞現象。步驟S130,主進程獲取緩存的子進程的日志信息并輸出為日志文件。輸出的日志文件中包含各子進程的日志信息,且各子進程的日志信息按照時間順序排列。因此,得到的日志文件包含了軟件運行期間內完整、有時序的日志信息,便于通過日志排查錯誤。在一個實施例中,在步驟S130之前,可判斷主進程是否退出,若是,則執行步驟S130,主進程獲取緩存的子進程的日志信息并輸出為日志文件,否則,返回步驟SllO繼續通過主進程獲取子進程的日志信息和日志信息的時間戳。本實施例中,在主進程沒有退出前,子進程的日志信息一致緩存在主進程中,當主進程退出時統一輸出日志文件,能夠提高日志文件輸出的效率。如圖5所示,本專利技術還提供一種多進程的日志輸出系統100,包括主進程模塊和與子進程模塊進行交互的至少一個子進程模塊,其中:主進程模塊包括通信模塊110、緩存模塊120及日志輸出模塊130,其中:通信模塊110用于獲取子進程的日志信息和日志信息的時間戳。如圖6所示,在一個實施例中,通信模塊110包括通信通道建立模塊111及信息接收模塊113。其中:通信通道建立模塊111用于主進程打開進程間通信通道,并接收子進程的進程間通信連接請求,與子進程建立通信通道。進程間通信通道即IPC (Inter-Process C本文檔來自技高網...
【技術保護點】
一種多進程的日志輸出方法,所述多進程包括主進程和與所述主進程進行交互的子進程,包括以下步驟:通過所述主進程獲取子進程的日志信息和所述日志信息的時間戳;所述主進程根據所述時間戳將所述子進程的日志信息進行緩存;所述主進程獲取緩存的所述子進程的日志信息并輸出為日志文件。
【技術特征摘要】
【專利技術屬性】
技術研發人員:高明,
申請(專利權)人:騰訊科技深圳有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。