我正在編寫將使用日誌文件的應用程序。我想要做的是當應用程序啓動時,它將檢查日誌文件是否超過特定大小,如果是,它會從日誌文件頂部刪除「x」行數量以縮短日誌文件的大小。這將是一個很好的方式去做這件事?將最新的條目寫入文件的頂部,然後在刪除時從底部刪除會更容易些嗎?刪除文本文件頂部的x行數
0
A
回答
1
所以,你有一個日誌文件,姑且稱之爲 「log.log
」
首先,移動log.log
到log.log.bak
。打開它閱讀。一行一行閱讀,直到閱讀完x行數。寫一個新文件,log.log
。繼續閱讀log.log.bak
中的每行,並將其寫入log.log
。當沒有更多行時,關閉log.log
和log.log.bak
,然後刪除log.log.bak。
一些僞代碼:
x = number of lines to delete
move log.log to log.log.bak
open log.log.bak for reading
while i have read < x lines
read a line and throw it away
open log.log for writing
while there are more lines in log.log.bak
read a line from log.log.bak
write the line to log.log
close log.log
close log.log.bak
delete log.log.bak
1
有很多的問題,左開
- 什麼環境,是你?在Un * x中,您可以簡單地'tail -100 input.txt> trimmed.txt'
- 您可以將文件加載到內存中,還是會過大?
- 你可以使用中間文件嗎?
- 您有哪些語言可用/您是否熟悉?
- 您多久進行一次修整?如果您的寫作比修剪更頻繁,請寫下底部(速度很快)並且很少執行昂貴的修剪操作。
如果您有C可用,您可以找到與fseek(f,0,SEEK_END);long size=ftell(f);
(打開f後立即)的文件大小。
如果您需要修剪,可以使用fseek(f,size-desired_size,SEEK_SET);
,然後使用while (fgetc(f)!='\n') {}
,這會將您帶到相交線的末端。
然後將剩餘的文件複製到新文件中。
1
我不會刪除一定數量的行。基本上你必須處理整個文件,如果你這樣做,那可能是很多處理。通常的做法是滾動日誌文件(將其重命名,通常只添加日期)並重新開始。
還要記住,文件是一定大小不能保證有必要的行,在這種情況下,你只是以昂貴的方式重命名文件。
我經常發現它也適用於應用程序啓動時也從文件頂部開始。
0
爲每種日誌保留幾個日誌文件File1-FileN。 當每個文件通過一些固定的大小時,填充文件File1然後File2等等。 當你填充FileN刪除File1並重新開始(刪除)並重寫File1,File2 ...
這給你一個週期性的固定大小日誌。
注意:這要求您跟蹤哪些是要寫入的當前日誌文件。這可以存儲在一個單獨的日誌文件中。
相關問題
- 1. 如何刪除YAML文件頂部的「---」?
- 2. 使用PowerShell刪除頂部的文本文件
- 3. Shell腳本:計數文件,刪除'X'最舊的文件
- 4. SQL刪除除頂部x之外的全部x
- 5. 如何刪除文本文件中的每個第X行?
- 6. 如何刪除文本文件的第一個「X」行?
- 7. 回聲X文本行並刪除
- 8. 刪除yaxis頂部的註釋(1e^x)
- 9. 使用SSIS刪除excel文件的頂部行
- 10. 刪除文本文件的前五行
- 11. 刪除文本文件中的行
- 12. 刪除文本文件中的行
- 13. C++刪除文件中的文本行
- 14. 刪除外部文本文件中的行
- 15. 刪除文本文件中每行的當前路徑部分
- 16. 刪除文本文件中的文本行的上下文
- 17. 在刪除文本文件中的行後刪除空白VB6
- 18. 在文本文件中刪除單行?
- 19. Powershell - 從文本文件中刪除行
- 20. 刪除文本行和重寫文件
- 21. 從文本文件中刪除一行?
- 22. 從文本文件中刪除一行
- 23. 從文本文件中刪除行
- 24. 從文本文件中刪除多行
- 25. 從from.txt文件中刪除文本行
- 26. 刪除X個文件X舊日--Powershell
- 27. 如何刪除條形圖頂部顯示的文本?
- 28. jquery部分刪除文本
- 29. 從twitter部件中刪除文本框
- 30. 從文本部件中刪除內容