2012-02-15 63 views
2

我有一個服務器程序,我正在寫。在這個程序中,我記錄了分配。在日誌記錄(對於服務器)中,習慣上覆蓋以前運行的日誌,使用某種新的運行頭追加到文件,或創建新的日誌文件(它不會經常重新啓動)。記錄禮儀

哪個這些解決方案是在Linux/Unix的/ MacOS的做事方式?

而且,任何人都可以建議爲C++/C一日誌庫?無論上述問題的答案如何,我都需要一個。

回答

3

看一看在/var/log/...you'll看到文件的結構類似於

serverlog 
serverlog.1 
serverlog.2 

這是通過logrotate做這就是所謂的一個cronjob。但是一切都只是按照文件內的時間順序排列。所以你應該每次追加到相同的日誌文件,並讓logrotate根據需要進行分割。

您還可以添加一個配置文件來/etc/logrotate.d/來控制特定日誌如何旋轉。根據日誌文件的大小,在這裏添加有關日誌記錄的信息可能是個好主意。您可以查看此目錄中的其他文件以查看語法。

+0

'logrotate'?那是什麼? – Linuxios 2012-02-15 19:43:44

+1

@ Linux_iOS.rb.cpp.c.lisp.m.sh:請參閱'man logrotate'或Google。簡短的說法是它完全符合鎂的說法:分裂/旋轉原木。支持系統中日誌的配置位於'/etc/logrotate.conf'和'/etc/logrotate.d/ *' – Cascabel 2012-02-15 19:47:37

+0

@ Linux_iOS.rb.cpp.c.lisp.m.sh logrotate is一個運行在Linux上的守護進程(可能是其他Unix,我不確定),並保持日誌文件的控制權。每隔一段時間它會啓動一個新的日誌文件'logfile',將前一個日誌文件歸檔爲'logfile.1',並將該歸檔文件移動到'logfile.2'等等。它也只保留一些歸檔文件,以便使用的空間不會不會失去控制。 – austin1howard 2012-02-15 19:49:10

2

這是一個比較複雜的問題。我不認爲有一個銀彈可以一舉消滅你所有的擔憂。

決定跟隨什麼樣的政策將設置你的要求的第一步。 爲什麼每項記錄?它的目的是什麼?在大多數情況下,這將導致一些比較具體的事實,如:

  • 你需要能夠比較當前日誌與過去的日誌。即使錯誤消息是不言而喻的,通過播放差異性,而不是通過服務器執行流程圖令人費解 - 或者更糟糕的是,它的源代碼,可以更快地確定導致該錯誤消息的進程。這意味着你需要從過去的運行至少一個記錄 - 覆蓋一味是一個明確的沒有

  • 你需要能夠找到解析日誌不走出去,你的方式。這意味着使用任何設施和政策已經建立。在Linux上,這意味着使用syslog工具設置重要的消息,以允許它們出現在通常的地方。

也有一些很好的建議聽從:

  • 時間是非常重要的。不僅僅是因爲它永遠不夠,而且因爲沒有適合每個條目的日誌文件實際上是無用的。確保每個條目都有一個時間戳 - 大多數系統範圍的日誌記錄工具都會爲你做到這一點。請確保所有計算機上的時鐘都儘可能準確 - 使用NTP是實現這一目標的好方法。

  • 日誌條目應儘可能自包含,最小限度的殘留。你不需要有一個特殊的標題,用顏色,花裏胡哨宣佈你的服務器正在啓動 - 一個簡單的MyServer(PID = XXX)開始於端口YYYYY就足夠了grep(或任何搜索功能體面的日誌查看器)來查找。

  • 您需要確定每個日誌記錄通道的粒度。將幾個GB的調試日誌數據發送到系統日誌記錄守護進程是而不是是一個好主意。一種好的做法可能是爲每個日誌級別和設施使用單獨的日誌文件,以便例如用戶活動不會與僅在調試代碼時有用的低級數據混淆。

  • 確保您的日誌文件在一個的地方,最好與其他應用程序分開。具有應用程序名稱的目錄是一個好的開始。

  • 保持在常態。當然你可能已經設計了一個新的漂亮的日誌文件命名方案,但如果它打破了系統中的約定,即使是最有經驗的操作員也很容易混淆。在危急情況下,大多數人都必須查看更詳細的日誌 - 不要讓它們變得更難。

  • 使用系統日誌處理設施。例如。在Linux上,這將意味着追加到同一個文件,並讓像logrotate這樣的外部守護進程來處理日誌文件。它不僅會減少你的工作量,而且還會自動維護整個日誌記錄策略。

  • 最後:總是將日誌重要數據複製到系統日誌中。操作員觀看系統日誌。請,請,請不要讓他們來看看其他地方,只是爲了找出你的應用即將推出的洲際彈道導彈......