我有一個winForm應用程序,其中有一個用於記錄目的的文本文件。我想限制其大小爲10 MB,以便如果通過此限制並寫入新數據,則會刪除文本文件中最舊的數據以爲新數據騰出空間。任何有用的建議?限制文本日誌文件的好方法
回答
使用一些日誌框架(我建議NLog或log4net,都可以從NuGet)提供滾動日誌文件功能。
E.g.與log4net的,你可以使用以下配置日誌文件大小限制爲10Mb
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
NLOG配置看起來像
<target xsi:type="File"
name="RollingFileAppender"
layout="${verbose}"
archiveAboveSize="10000000"
maxArchiveFiles="10"
archiveFileName="${basedir}/archives/log.{#####}.txt"
archiveNumbering="Sequence"
fileName="log.txt" />
感謝您的回覆。有沒有任何有用的資源指導如何將此框架與您當前的winForm應用程序集成。 – user2968369
@ user2968369只需添加對日誌框架的引用(通過NuGet),然後爲框架添加配置(在app.config或單獨的配置文件中),在應用程序中檢索記錄器並寫入日誌[請參閱NLog Tuturial](https:// github.com/nlog/nlog/wiki/Tutorial) –
我會使用日誌庫,像log4net的。 RollingFileAppender完全符合您的要求。
只需在寫入文件之前檢查文件大小。這裏一政黨成員
http://www.dotnetperls.com/fileinfo-length
如果您想更多的東西嘗試NLOG或log4net的這是其他人則建議這是真正有用的
如果你不想使用日誌框架(儘管你可能在文件的長度在每次寫入時間
- 查找(或者其它的一些常規時期)
- 當它超過了:應該,真的),那麼你可以做以下限制,執行修剪操作 - 這將涉及從文件的開始處開始,然後遍歷文件讀取行,直到讀取足夠的數據以修剪。找到這個位置之後,有幾種方法可以從文件的開頭刪除空格,但是除非您很樂意將整個文件加載到內存中,否則這些空間都不是很有吸引力,現在對於10MB文件來說這並不合理。
但是,要實現的關鍵是從文件中刪除更多的文件,而不是恢復到極限以下的最小值 - 例如讓文件增長到11MB,然後將其修剪回10MB。那麼在每個1MB的日誌記錄後,你只能運行一個修剪週期。如果你對此很天真,那麼你會發現自己正在爲每一條登錄線修剪,這是荒謬的。
但是實際上,已經存在的優秀的.NET日誌記錄框架是一種更好的方法 - 例如,它們會像異步日誌記錄和關鍵的日常日誌滾動月份一樣。
嗯,有趣。我們如何在文件開始時進行修剪操作。比如我如何從文件開始讀取1 MB的數據。刪除它再次使我的文件大小回到10 MB? – user2968369
某些形式的複製將涉及 - 將數據複製到同一文件中的較早點,或者複製到另一個文件中,然後調用File.Replace。您也許可以考慮使用File.ReadLines,然後使用「Skip()」調用來刪除特定數量的行。不幸的是,從文件中刪除空間是緩慢和乏味的,這就是爲什麼大多數數據庫將文件從壓縮文件中刪除的原因。 –
嗯,是的,我注意到有沒有像File.DeleteLine – user2968369
- 1. log4j2 - 限制日誌文件的數量
- 2. 最好的辦法從日誌文件
- 3. 限制德比日誌文件大小
- 4. 限制大小tinyproxy日誌文件
- 5. DB2日誌文件限制,SQLCODE:-964
- 6. 限制mysql日誌文件大小
- 7. 日誌4j TimeBasdRollingPolicy文件大小限制
- 8. WAMP限制日誌文件大小
- 9. asp.net日誌文件權限
- 10. 使用log4net和azure文件appender設置日誌文件限制
- 11. Windows事件日誌與文本日誌
- 12. 什麼是複製文本文件的更好方法?
- 13. log4J爲方法創建日誌文件
- 14. 製作gdb日誌文件
- 15. Wix:複製日誌文件
- 16. 更好的方法來限制unix命令查找文件名
- 17. docker上的Symfony日誌文件權限
- 18. 在shell腳本中寫入日誌文件的方法
- 19. logback日誌記錄中的文本長度限制
- 20. 限制log4j2中彙總的日誌文件的最大數量
- 21. 控制錯誤日誌的文本
- 22. ubuntu apache2日誌文件權限
- 23. Magento日誌文件權限問題
- 24. 單行文本日誌文件分析
- 25. 批量文本文件日誌
- 26. 解析文本(日誌文件)
- 27. php讀取大文本文件日誌
- 28. 如何在Mac OS上設置Nginx日誌文件的限制?
- 29. 如何設置boost.log來限制日誌文件的數量
- 30. 如何將winston日誌文件限制爲特定的數字
在這裏你去http://www.dotnetperls.com/fileinfo-length。快樂的編碼! – Misters
也許是一種奇怪的方法,但是你可以計算字符的數量並將它們乘以尺寸。 – Max