基于syslogd的重復日志控制方法
【專利摘要】本發(fā)明提供了一種基于syslogd的重復日志控制方法及其裝置,通過利用syslogd來進行日志信息記錄時,以暫存區(qū)的形式存放一個預設時間條件內產生過的日志信息,每當有一條新的日志信息輸入時檢查鏈表中是否有相同日志信息,如果有,只是把該條日志信息的重復次數(shù)增加1,而后在預設時間條件滿足后將暫存區(qū)的日志信息連同其重復次數(shù)寫入日至信息中,由此對日志信息制是否直接需要去寫入到日志文件增加了一重判斷,實現(xiàn)了在不丟失日志信息的前提下,能夠防止大量重復信息在短時間內被寫入到日志文件中。此修改不會占用很多的系統(tǒng)資源,但卻可以很大程度上控制重復信息被大量寫入到日志文件中,能夠使日志資源得到更充分的利用。
【專利說明】基于syslogd的重復日志控制方法
【技術領域】
[0001]本發(fā)明涉及電子設備文件存儲管理領域,尤其是指一種基于syslogd的重復日志控制方法及其裝置。
【背景技術】
[0002]日志系統(tǒng),對幾乎所有的電子設備來說都是一個很重要的部分,它可以用來記錄設備的運行軌跡,操作步驟以及運行過程中產生的錯誤信息等,這些都可以用來幫助用戶及工作人員來了解設備的運行情況及出錯原因。
[0003]對于類Unix系統(tǒng)來說,大部分日志系統(tǒng)都是用syslogd進程來對日志進行寫入的,該進程對日志的管理功能還是很強大的,可以對日志分為不同的等級,可以對日志信息進行文件存儲,郵件發(fā)送等不同方式來進行處理,但其也有個缺點,雖然當同一條日志在重復多次出現(xiàn)時它只會記錄一個重復次數(shù)而不是把所有的重復的情況都記錄下來,但是當多條日志間隔重復出現(xiàn)時,它卻會把所有的重復日志全部記錄下來。這樣,當設備萬一跑入到一個較大的循環(huán)甚至一個死循環(huán)中,而在每一次的循環(huán)中又有兩條以上的日志信息需要記錄時,就會在短時間內寫入大量的日志信息,進而導致大量的內存空間被無用的日志占用,甚至導致前期有用信息被覆蓋掉。
【發(fā)明內容】
[0004]本發(fā)明的目的在于克服了上述缺陷,提供一種利用syslogd來進行日志信息記錄時,在不丟失日志信息的前提下,能夠防止大量重復信息在短時間內被寫入到日志文件中的基于syslogd的重復日志控制方法及其裝置。
[0005]本發(fā)明的目的是這樣實現(xiàn)的:一種基于syslogd的重復日志控制方法,它包括日志緩存流程,所述日志緩存流程包括:
[0006]將預設時間條件內產生的日志信息存入至暫存區(qū)中;
[0007]判斷所述日志信息是否已存在暫存區(qū)中,若是,則將與日志信息對應的重復次數(shù)加I ;
[0008]待預設時間到達后,將所述日志信息及對應的重復次數(shù)寫入日志文件并將暫存區(qū)
清空;
[0009]上述方法中,所述日志緩存流程具體包括步驟,
[0010]A)、當有日志信息存入,判斷是否存在暫存區(qū),若否,則執(zhí)行步驟E,若是,則執(zhí)行步驟B;
[0011]B)、判斷暫存區(qū)內是否有與存入的日志信息相同的日志信息,若否,則執(zhí)行步驟F,若是,則執(zhí)行步驟C ;
[0012]C)、計算暫存區(qū)中該相同的日志信息對應的第一次產生時間與最后一次產生時間之間的日志產生時間段,判斷日志產生時間段是否超出預設時間條件,若否,則將該日志信息產生的時間作為日志最后一次產生時間寫入暫存區(qū)中并將該日志信息對應的日志重復次數(shù)加I;若是,則將該日志信息對應的日志產生時間段、日志重復次數(shù)及日志信息寫入日志文件中,然后執(zhí)行步驟D ;
[0013]D)、將該日志信息從暫存區(qū)中刪除;
[0014]E)、產生一個暫存區(qū),然后執(zhí)行步驟B ;
[0015]F)、將存入的日志信息、該日志信息產生的時間作為日志第一次產生時間寫入暫存區(qū),并初始化該日志信息對應的日志重復次數(shù)及最后一次產生時間;
[0016]上述方法中,它還包括臨時存儲流程,所述臨時存儲流程包括:創(chuàng)建臨時文件,在設定間隔時間內將暫存區(qū)中信息寫入臨時文件中;
[0017]上述方法中,所述臨時存儲流程中,待暫存區(qū)中信息寫入臨時文件后,清空暫存區(qū);對應的日志緩存流程中所述步驟A前還包括,檢查臨時文件中是否為空,是則執(zhí)行步驟A,否則將臨時文件中的信息寫入日志文件中;
[0018]上述方法中,所述預設時間條件包括同一日志信息從上一次出現(xiàn)到再次出現(xiàn)的時間間隔和/或同一日志信息從第一次產生到再次出現(xiàn)的時間差;
[0019]上述方法中,所述暫存區(qū)為鏈表;
[0020]上述方法中,它還包括日志寫入控制流程,所述日志寫入控制流程包括判斷日志信息級別是否高于預設級別,若是將日志信息直接寫入日志文件;若否執(zhí)行日志緩存流程。
[0021]相比于常見的日志信息控制方法,本發(fā)明的有益效果在于以暫存區(qū)的形式存放一個預設時間條件內產生過的日志信息來控制接下來輸入的日志信息是否需要去寫入到日志文件中去的,一般情況下,此修改不會占用很多的系統(tǒng)資源,但卻可以很大程度上控制重復信息被大量寫入到日志文件中,能夠使日志資源得到更充分的利用。
【專利附圖】
【附圖說明】
[0022]下面結合附圖詳述本發(fā)明的具體結構
[0023]圖1為本發(fā)明一【具體實施方式】的方法流程圖。
【具體實施方式】
[0024]為詳細說明本發(fā)明的技術內容、構造特征、所實現(xiàn)目的及效果,以下結合實施方式并配合附圖詳予說明。
[0025]本發(fā)明涉及一種基于syslogd的重復日志控制方法,它包括日志緩存流程;
[0026]所述日志緩存流程包括:
[0027]將預設時間條件內產生的日志信息存入至暫存區(qū)中;
[0028]判斷所述日志信息是否已存在暫存區(qū)中,若是,則將與日志信息對應的重復次數(shù)加I ;
[0029]待預設時間到達后,將所述日志信息及對應的重復次數(shù)寫入日志文件并將暫存區(qū)清空。
[0030]可見,上述實施例的方法是在利用syslogd來進行日志信息記錄時,以暫存區(qū)的形式存放一個預設時間條件內產生過的日志信息,每當有一條新的日志信息輸入時檢查鏈表中是否有相同日志信息,如果有,只是把該條日志信息的重復次數(shù)增加1,而后在預設時間條件滿足后將暫存區(qū)的日志信息連同其重復次數(shù)寫入日至信息中,由此對日志信息制是否直接需要去寫入到日志文件增加了一重判斷,從而實現(xiàn)了在不丟失日志信息的前提下,能夠防止大量重復信息在短時間內被寫入到日志文件中。一般情況下,此修改不會占用很多的系統(tǒng)資源,但卻可以很大程度上控制重復信息被大量寫入到日志文件中,能夠使日志資源得到更充分的利用。
[0031]作為一實施例,上述方法中,所述日志緩存流程具體包括步驟,
[0032]A)、當有日志信息存入,判斷是否存在暫存區(qū),若否,則執(zhí)行步驟E,若是,則執(zhí)行步驟B;
[0033]B)、判斷暫存區(qū)內是否有與存入的日志信息相同的日志信息,若否,則執(zhí)行步驟F,若是,則執(zhí)行步驟C ;
[0034]C)、計算暫存區(qū)中該相同的日志信息對應的第一次產生時間與最后一次產生時間之間的日志產生時間段,判斷日志產生時間段是否超出預設時間條件,若否,則將該日志信息產生的時間作為日志最后一次產生時間寫入暫存區(qū)中并將該日志信息對應的日志重復次數(shù)加I ;若是,則將該日志信息對應的日志產生時間段、日志重復次數(shù)及日志信息寫入日志文件中,然后執(zhí)行步驟D ;
[0035]D)、將該日志信息從暫存區(qū)中刪除;
[0036]E)、產生一個暫存區(qū),然后執(zhí)行步驟B ;
[0037]F)、將存入的日志信息、該日志信息產生的時間作為日志第一次產生時間寫入暫存區(qū),并初始化該日志信息對應的日志重復次數(shù)及最后一次產生時間。
[0038]本實施例中對暫存區(qū)通過何機制、何實際進行創(chuàng)立以及其中暫存信息種類進行了限定。通過在將日志信息放入暫存區(qū)同時在暫存區(qū)對應建立存放對應的日志最后一次產生時間及第一次產生時間的信息,而后在下一次執(zhí)行到該步驟后可比較暫存區(qū)中該日志信息對應的時間差即可實現(xiàn)是否超出預設時間條件的判斷。該流程面對對象涉及,最大程度簡化了日志信息在暫存區(qū)中保留條件的判斷流程。
[0039]作為一實施例,上述方法中,它還包括臨時存儲流程,所述臨時存儲流程包括:創(chuàng)建臨時文件,在設定間隔時間內將暫存區(qū)中信息寫入臨時文件中。
[0040]本實施例通過增加存儲流程,從而使得暫存區(qū)中數(shù)據(jù)可在存入日志信息,導出日志文件的過程中可在需要的時間(例如設定的時間點,或每間隔一個固定的較短時間(5秒)內)進行暫存,從而避免系統(tǒng)意外斷電情況下,暫存區(qū)中數(shù)據(jù)未來得及導出日志文件帶來的信息丟失問題。補強了日志信息獲取的可靠性。
[0041]作為一實施例,上述方法中,所述臨時存儲流程中,待暫存區(qū)中信息寫入臨時文件后,清空暫存區(qū);對應的日志緩存流程中所述步驟A前還包括,檢查臨時文件中是否為空,是則執(zhí)行步驟A,否則將臨時文件中的信息寫入日志文件中。
[0042]本實施例中,在待暫存區(qū)中信息寫入臨時文件后,清空暫存區(qū)可避免在較短時間內反復將暫存區(qū)寫入臨時文件過程同樣數(shù)據(jù)重復的問題。而在日志緩存流程一開始增加判斷臨時文件的步驟則可以智能判斷上次是否有意外掉電問題,若有則表明在上次斷電時還存在有沒有寫入到日志文件中的內容,通過把其重新寫入到日志文件中可以繼續(xù)上次意外斷電未完成事項。
[0043]作為一實施例,上述方法中,所述預設時間條件包括同一日志信息從上一次出現(xiàn)到再次出現(xiàn)的時間間隔和/或同一日志信息從第一次產生到再次出現(xiàn)的時間差。本實施例采用這兩種預設時間條件的有優(yōu)點在于:
[0044]同一日志信息從上一次出現(xiàn)到再次出現(xiàn)的時間間隔t,保證了同一條日志信息兩次出現(xiàn)的時間間隔只有在小于t (例如2min)時才會被寫入到暫存區(qū)內,否則,會直接寫入到日志文件中并清空相應暫存區(qū)。
[0045]同一日志信息從第一次產生到再次出現(xiàn)的時間差T,保證了當同一條日志信息重發(fā)長時間出現(xiàn)時,能夠強制每T (例如Ih)時間強制把暫存區(qū)內相應日志寫入到日志文件中,防止日志寫入時間距日志產生時間過長的情況發(fā)生。
[0046]作為一實施例,上述方法中,所述暫存區(qū)為鏈表。鏈表(Linked list)是一種常見的基礎數(shù)據(jù)結構,是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點里存到下一個節(jié)點的指針(Pointer )訪問特定編號的節(jié)點則需要O (η )的時間,而順序表相應的時間復雜度分別是O(1gn)和O⑴。使用鏈表結構可以克服數(shù)組鏈表需要預先知道數(shù)據(jù)大小的缺點,鏈表結構可以充分利用計算機內存空間,實現(xiàn)靈活的內存動態(tài)管理。
[0047]本實施例中,考慮到技術應用環(huán)境中需要經(jīng)常插入和刪除元素,而鏈表在插入和刪除元素時不需要移動其余元素,效率高,為O (I),故采用了鏈表為最優(yōu)選擇。
[0048]作為一實施例,上述方法中,它還包括日志寫入控制流程,所述日志寫入控制流程包括判斷日志信息級別是否高于預設級別,若是將日志信息直接寫入日志文件;若否執(zhí)行日志緩存流程。本實施例通過在增加日志寫入控制流程,從而引入日志信息分級概念,從而可以更靈活的調節(jié)不同級別的日志信息是否需要緩存重復的問題。
[0049]具體實施例:
[0050]如圖1所示為配備有日志信息級別判別,且采用鏈表作為暫存區(qū)的基于syslogd的重復日志控制方法,包括步驟:
[0051]A)、日志信息輸入;
[0052]B)。判斷日志信息級別是否高為預設的重要級別?若是則執(zhí)行步驟M ;若否執(zhí)行步驟C。
[0053]C)、判斷是否存在鏈表?,若否,則執(zhí)行步驟D,若是,則執(zhí)行步驟L ;
[0054]D)、獲取當前時間;
[0055]E)、遍歷整個鏈表,找尋是否有相同的日志信息;
[0056]F)、判斷鏈表內是否有與存入的日志信息相同的日志信息,若否,則執(zhí)行步驟H,若是,則執(zhí)行步驟G ;
[0057]G)、將獲取的當前時間更新為該日志信息的最后一次產生時間,且重復次數(shù)+1,返回步驟A ;
[0058]H)、將該日志信息插入鏈表,同時將獲取的當前時間作為該日志信息的第一次產生時間,執(zhí)行步驟I ;
[0059]I)、根據(jù)該日志信息對應的第一次產生時間與最后一次產生時間得到日志產生時間段,判斷該日志產生時間段是否超出預設時間條件,若否則返回步驟A ;若是,則執(zhí)行步驟J;
[0060]J)、調用printchopped將該日志信息連同其重復次數(shù)、第一次產生時間與最后一次產生時間一并寫入日志文件中,執(zhí)行步驟K ;
[0061]K)、將鏈表中該日志信息刪除,返回步驟A ;[0062]L)、創(chuàng)建一個鏈表,而后執(zhí)行步驟H ;
[0063]M)、產生一個暫存區(qū),然后執(zhí)行步驟B ;
[0064]N)、調用printchopped將該日志信息寫入日志文件中。
[0065]以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的【技術領域】,均同理包括在本發(fā)明的專利保護范圍內。
【權利要求】
1.一種基于syslogd的重復日志控制方法,其特征在于:包括日志緩存流程,所述日志緩存流程包括: 將預設時間條件內產生的日志信息存入至暫存區(qū)中; 判斷所述日志信息是否已存在暫存區(qū)中,若是,則將與日志信息對應的重復次數(shù)加I ; 待預設時間到達后,將所述日志信息及對應的重復次數(shù)寫入日志文件并將暫存區(qū)清空。
2.如權利要求1所述的基于syslogd的重復日志控制方法,其特征在于:所述日志緩存流程具體包括步驟, A)、當有日志信息存入,判斷是否存在暫存區(qū),若否,則執(zhí)行步驟E,若是,則執(zhí)行步驟B ; B)、判斷暫存區(qū)內是否有與存入的日志信息相同的日志信息,若否,則執(zhí)行步驟F,若是,則執(zhí)行步驟C ; C)、計算暫存區(qū)中該相同的日志信息對應的第一次產生時間與最后一次產生時間之間的日志產生時間段,判斷日志產生時間段是否超出預設時間條件,若否,則將該日志信息產生的時間作為日志最后一次產生時間寫入暫存區(qū)中并將該日志信息對應的日志重復次數(shù)加I ;若是,則將該日志信息對應的日志產生時間段、日志重復次數(shù)及日志信息寫入日志文件中,然后執(zhí)行步驟D ; D)、將該日志信息從暫存區(qū)中刪除; E)、產生一個暫存區(qū),然后執(zhí)行步驟B; F)、將存入的日志信息、該日志信息產生的時間作為日志第一次產生時間寫入暫存區(qū),并初始化該日志信息對應的日志重復次數(shù)及最后一次產生時間。
3.如權利要求1所述的基于syslogd的重復日志控制方法,其特征在于:它還包括臨時存儲流程,所述臨時存儲流程包括:創(chuàng)建臨時文件,在設定間隔時間內將暫存區(qū)中信息寫入臨時文件中。
4.如權利要求3所述的基于syslogd的重復日志控制方法,其特征在于:所述臨時存儲流程中,待暫存區(qū)中信息寫入臨時文件后,清空暫存區(qū);對應的日志緩存流程中所述步驟A前還包括,檢查臨時文件中是否為空,是則執(zhí)行步驟A,否則將臨時文件中的信息寫入日志文件中。
5.如權利要求1-4任意一項所述的基于syslogd的重復日志控制方法,其特征在于:所述預設時間條件包括同一日志信息從上一次出現(xiàn)到再次出現(xiàn)的時間間隔和/或同一日志信息從第一次產生到再次出現(xiàn)的時間差。
6.如權利要求1-4任意一項所述的基于syslogd的重復日志控制方法,其特征在于:所述暫存區(qū)為鏈表。
7.如權利要求1-4任意一項所述的基于syslogd的重復日志控制方法,其特征在于:它還包括日志寫入控制流程,所述日志寫入控制流程包括判斷日志信息級別是否高于預設級別,若是將日志信息直接寫入日志文件;若否執(zhí)行日志緩存流程。
【文檔編號】G06F17/30GK103761262SQ201310753706
【公開日】2014年4月30日 申請日期:2013年12月31日 優(yōu)先權日:2013年12月31日
【發(fā)明者】郭新新 申請人:深圳英飛拓科技股份有限公司