我正在研究一個基於Java SOAP的web服務應用程序,我將stdout寫入文本文件作爲日誌供我們參考。該文件正在大幅增長,所以我需要檢查文件的大小......例如,如果文件大小超過10 Mb,我必須創建另一個文件。滾動日誌文件和刪除舊的日誌文件
像這樣,我必須創建10個文件,一個接一個地旋轉,直到10個文件。達到10個文件後,我必須刪除開始文件並重新開始創建...
如何刪除文件後的否。的文件將成爲10?
我正在研究一個基於Java SOAP的web服務應用程序,我將stdout寫入文本文件作爲日誌供我們參考。該文件正在大幅增長,所以我需要檢查文件的大小......例如,如果文件大小超過10 Mb,我必須創建另一個文件。滾動日誌文件和刪除舊的日誌文件
像這樣,我必須創建10個文件,一個接一個地旋轉,直到10個文件。達到10個文件後,我必須刪除開始文件並重新開始創建...
如何刪除文件後的否。的文件將成爲10?
大多數日誌記錄框架都提供了您要查找的內容。 在的logback你應該能夠通過適當配置RollingFileAppender進行實現它:
RollingFileAppender進行擴展FileAppender有能力側翻日誌文件。例如,RollingFileAppender可以登錄到名爲log.txt文件的文件,並且一旦滿足某個條件,就將其日誌目標更改爲另一個文件。
和
RollingPolicy負責涉及文件移動和重命名的翻車過程。
我有沒有日誌文件中創建河段後刪除文件到10 – user2377755 2013-05-13 13:14:45
,我必須爲此編寫java代碼...我是新的webservices和java所以請幫助我 – user2377755 2013-05-13 13:15:25
我用logback做到這一點。以下示例是基於時間的滾動策略。根據您在日誌中輸出的數據量多少,這可能適用於您。
另外,作爲獎勵,我的配置文件將日誌轉換爲HTML,以便查看想要查看日誌文件的管理類型。配置文件的
相關部分:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs\logFile.html</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -- >
<fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 10MB -- >
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 10 days' worth of history -- >
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<charset>UTF-8</charset>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
</layout>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
相關Maven的依賴關係:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.12</version>
</dependency>
Log4j可以做到這一點。具體是RollingFileAppender類。
我看到了很多的答案告訴你使用Log4J的,但你可以通過簡單地創建使用Java自身的記錄器做這FileHandler:
Handler handler =
new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
感謝敵人的答案....但我想刪除舊的文件....後達到10個文件......這種情況可以由文件處理程序處理.....請回復我....我從過去一週做這項工作...如果可能expalin與代碼 – user2377755 2013-05-15 09:35:46
我還沒有嘗試過,但是我對FileHandler文檔的理解是「旋轉文件集」意味着一遍又一遍地使用相同的文件。意思是,一旦MyService-9.log達到其大小限制,記錄器會截斷並覆蓋MyService-0.log(假設FileHandler的構造計數爲10)。因此,文件本身並不會被刪除,但永遠不會有比count參數中指定的數量更多的文件。 – VGR 2013-05-15 10:58:10
是的,我只是測試了一下,看看它確實取代了舊的日誌,謝謝。 – Anonsage 2016-07-03 02:20:16
在的log4j.xml你可以嘗試以下方法:
<appender name="fileappender" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="applog.log"/>
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
該值告訴log4j.xml只保留10個循環的日誌文件。
或者,如果你正在使用(而不是XML)
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=applog.log
log4j.appender.File.Append=true
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
log4j.appender.[appenderName].MaxBackupIndex = 10
我按照你寫的那樣加上了MaxBackupIndex,但在org.apache.log4j.rolling.RollingFileAppender中得到了「log4j:WARN沒有這樣的屬性[maxBackupIndex]」。 – Karussell 2015-09-11 18:54:09
啊,它看起來像我使用RollingFileAppender從log4j演員中沒有這...看到http://stackoverflow.com/questions/23945373/log4j-extras-maxbackupindex-or-similar – Karussell 2015-09-11 19:07:59
的屬性文件,如果使用java.util.logging.Logger
,你可以用FileHandler
做到這一點。
來源:kodejava
package org.kodejava.example.logging;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
import java.io.IOException;
public class RollingLogFile {
//
// Set a small log file size to demonstrate the rolling log files.
//
public static final int FILE_SIZE = 1024;
public static void main(String[] args) {
Logger logger = Logger.getLogger(RollingLogFile.class.getName());
try {
//
// Creating an instance of FileHandler with 5 logging files
// sequences.
//
FileHandler handler = new FileHandler("myapp.log", FILE_SIZE, 5, true);
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);
logger.setUseParentHandlers(false);
} catch (IOException e) {
logger.warning("Failed to initialize logger handler.");
}
logger.info("Logging information message.");
logger.warning("Logging warning message.");
}
}
是否有可能使用logging.properties文件做到這一點? – Yogesh 2018-02-22 05:02:46
看看'Log4j',它會爲你做的一切,一旦你設置它「正確」 – Bill 2013-05-13 12:44:08