java.util.logging.Filehandler更改输出文件时的调用方法

时间:2015-02-21 11:10:49

标签: java logging filehandler

在我的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();
}

您是否知道如何应对此事件?

1 个答案:

答案 0 :(得分:1)

  

当文件大小超过10 MB时,他会更改回log0.txt。这是对的吗?

在正常情况下是的。如果FileHandler无法获取文件锁定,则会发生其他一些规则。

  

因此,在这种情况下,旧的日志文件将被覆盖。为了避免这种情况,我想在记录器更改输出文件时调用Methode(我向管理员发送电子邮件)。

目前,在FileHandler旋转时监听的唯一方法是扩展FileHandler并覆盖protected 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() {
            //...
        }
    }

如果您想阻止轮换,那么您必须改变目标。您必须离开限制并增加计数或降低计数并增加限制。