[英]Call method when java.util.logging.Filehandler changes output file
在我的java服務器中,我使用java.util.logging框架記錄程序的狀態。 為了避免日志文件太大,我使用以下Filehandler構造函數:
//import java.util.logging.FileHandler;
//import java.util.logging.Logger;
FileHandler fileLog = new FileHandler("log%g.txt", 10 * 1024*1014, 2, false);
logger.addHandler(fileLog);
以我的理解,記錄器現在寫入log0.txt,直到文件大小大於10MB。 然后,他更改為log1.txt。 當文件大小大於10 MB時,他將更改回log0.txt。 這是正確的嗎?
因此,在這種情況下,舊的日志文件將被覆蓋。 為了避免這種情況,當記錄器更改輸出文件時,我想調用Methode(在其中向管理員發送電子郵件)。
void callOnOutputfileChanged() {
sendEmailToAdmin();
}
您有想法如何應對這一事件嗎?
當文件大小大於10 MB時,他將更改回log0.txt。 這是正確的嗎?
在正常情況下,是的。 如果FileHandler無法獲取文件鎖定,則還有其他一些規則在發生。
因此,在這種情況下,舊的日志文件將被覆蓋。 為了避免這種情況,當記錄器更改輸出文件時,我想調用Methode(在其中向管理員發送電子郵件)。
當前,當FileHandler旋轉時,監聽的唯一方法是擴展FileHandler並覆蓋受保護的void setOutputStream(OutputStream)方法。 旋轉期間將FileHandler級別設置為OFF。 這是一個示例類:
public class ListeningFileHandler extends FileHandler {
public ListeningFileHandler() throws IOException {
super();
}
@Override
protected synchronized void setOutputStream(OutputStream out) throws SecurityException {
super.setOutputStream(out);
if (Level.OFF.equals(super.getLevel())) { //Rotating...
sendEmailToAdmin();
}
}
private void sendEmailToAdmin() {
//...
}
}
如果要防止輪換,則必須更改目標。 您要么必須離開限制並增加計數,要么降低計數並增加限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.