Java 从两个不同的类登录xml的正确方法是什么?目前,我在生成的xml中发现了一个错误

Java 从两个不同的类登录xml的正确方法是什么?目前,我在生成的xml中发现了一个错误,java,xml,logging,java.util.logging,Java,Xml,Logging,Java.util.logging,默认情况下,代码为: class Tester { public static void main(String args[]) throws IOException{ Logger logger = Logger.getLogger(Tester.class.getName()); FileHandler fHandler = new FileHandler("LOGGED.xml",true); logger.addHandler(fHandler); l

默认情况下,代码为:

class Tester {
  public static void main(String args[]) throws IOException{
    Logger logger = Logger.getLogger(Tester.class.getName());
    FileHandler fHandler = new FileHandler("LOGGED.xml",true);
    logger.addHandler(fHandler);
    logger.log(Level.INFO,"This is an info log message");
    fHandler.close();
  }
}
生成以下类型的
xml

<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
  <record>
    <date>2013-02-03T08:16:37</date>
    <millis>1359859597763</millis>
    <sequence>0</sequence>
    <logger>Tester</logger>
    <level>INFO</level>
    <class>Tester</class>
    <method>main</method>
    <thread>1</thread>
    <message>This is an info log message</message>
 </record>
</log>
}

它将以下内容附加到先前生成的xml中:

<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
 <record>
   <date>2013-02-03T08:16:51</date>
   <millis>1359859611306</millis>
   <sequence>0</sequence>
   <logger>Tester_1</logger>
   <level>INFO</level>
   <class>Tester_1</class>
   <method>main</method>
   <thread>1</thread>
   <message>This is a custom message from my own formatter !</message>
 </record>
</log>
我该如何避免这些陈述:

<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">


两次?我想要在xml末尾附加
log
标记的xml。

修复它的简单方法是配置FileHandler,以便在每次启动应用程序时生成新的文件名,例如

new FileHandler("log%g.xml", 100000000, 10);

有关详细信息,请参见API

如果您希望在日志文件中完全避免使用xml头,可以在代码中尝试此操作

    FileHandler fHandler = new FileHandler("LOGGED.xml", true);
    fHandler.setFormatter(new XMLFormatter() {
        @Override
        public String getHead(Handler h) {
            return "";
        }
    });
    logger.addHandler(fHandler);

RFE中列出了建议的修补程序。您可以扩展XMLFormatter并重写
getHead
方法,以有条件地根据目标文件的大小(空或满)写入默认的head值或空字符串。假设您可以计算用于日志记录的当前文件。

这可能有助于它们不会被删除,FileHandler每次都会创建一个新文件。我什么时候说过要避免头?我说过要附加日志消息而不重复
我该怎么做?
new FileHandler("log%g.xml", 100000000, 10);
    FileHandler fHandler = new FileHandler("LOGGED.xml", true);
    fHandler.setFormatter(new XMLFormatter() {
        @Override
        public String getHead(Handler h) {
            return "";
        }
    });
    logger.addHandler(fHandler);