1

デフォルトのコード:

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に次のコードを追加しようとすると、次のようになります。

class Tester_1{
public static void main(String args[]) {
    try {
        Logger logger = Logger.getLogger(Tester_1.class.getName());
        FileHandler fHandler = new FileHandler("LOGGED.xml",true);
        logger.addHandler(fHandler);
        logger.log(Level.INFO,"This is a custom message from my own formatter !");
        fHandler.close();
    }catch(Exception exc) {
        exc.printStackTrace();
    }
}

}

以前に生成された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をブラウザで開こうとすると、次のエラーが表示されます。

This page contains the following errors:

error on line 27 at column 6: XML declaration allowed only at the start of the document

ステートメントを回避するにはどうすればよいですか:

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

二度 ?xmlの末尾にタグを追加しただけのxmlが必要です。log

4

3 に答える 3

1

ログ ファイルで xml ヘッダーを完全に回避したい場合は、コードでこれを試すことができます。

    FileHandler fHandler = new FileHandler("LOGGED.xml", true);
    fHandler.setFormatter(new XMLFormatter() {
        @Override
        public String getHead(Handler h) {
            return "";
        }
    });
    logger.addHandler(fHandler);
于 2013-02-03T04:15:37.310 に答える
0

これを修正する簡単な方法は、アプリを起動するたびに新しいファイル名を生成するように FileHandler を構成することです。

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

詳細については API を参照してください

于 2013-02-03T03:55:17.580 に答える
0

提案されたパッチは RFE JDK-4629315 にリストされています: Appending of XML Logfiles does not merge new records. XMLFormatter を拡張し、getHeadメソッドをオーバーライドして、ターゲット ファイルのサイズ (空または完全) に基づいて、デフォルトのヘッド値または空の文字列を条件付きで書き込むことができる場合があります。ロギングに使用されている現在のファイルを計算できると仮定します。

于 2013-08-01T15:36:12.203 に答える