簡體   English   中英

java.util.logging.Filehandler更改輸出文件時的調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM