7

私は単純なロギングプログラムを持っています:

public class LoggingExample1 {
 public static void main(String args[]) {
try {
  LogManager lm = LogManager.getLogManager();
  Logger logger;
  FileHandler fh = new FileHandler("log_test.txt");

  logger = Logger.getLogger("LoggingExample1");
  lm.addLogger(logger);
  logger.setLevel(Level.INFO);

  fh.setFormatter(new SimpleFormatter());

  logger.addHandler(fh);
  // root logger defaults to SimpleFormatter. We don't want messages
  // logged twice.
  //logger.setUseParentHandlers(false);

  logger.log(Level.INFO, "test 1");
  logger.log(Level.INFO, "test 2");
  logger.log(Level.INFO, "test 3");
  fh.close();
} catch (Exception e) {
  System.out.println("Exception thrown: " + e);
  e.printStackTrace();
}
}
}

私はこのログを取得します:

Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 1
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 2
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 3

しかし、LoggingExample1 main や INFO などのメッセージを削除し、コードによってログに記録されたデータのみを保持したいと考えています。私に何ができる???

4

4 に答える 4

7

これはSimpleFormatter、クラス名、メソッド名などを常にログに記録する を使用しているためです。この情報が必要ない場合は、独自のフォーマッタを作成できます。以下は、ログ レベルとログ メッセージのみを出力するフォーマッタの簡単な例です。

import java.util.logging.*;

class MyFormatter extends Formatter{

    /* (non-Javadoc)
     * @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
     */
    @Override
    public String format(LogRecord record) {
        StringBuilder sb = new StringBuilder();
        sb.append(record.getLevel()).append(':');
        sb.append(record.getMessage()).append('\n');
        return sb.toString();
    }    
}

ファイル ハンドラで次のフォーマッタを使用します。

fh.setFormatter(new MyFormatter());

これは出力されます:

INFO:test 1
INFO:test 2
INFO:test 3
于 2011-08-01T12:30:03.910 に答える
3

以下のように、フォーマッタ クラスを使用してクラスを拡張します。

public class MyFormatter extends SimpleFormatter{

@Override

public synchronized String format(LogRecord record){

    record.setSourceClassName(MyFormatter.class .getName());
    return String.format(
            " [%1$s] :%2$s\n",
            record.getLevel().getName(), formatMessage(record));

    }
}

次に、メイン クラスで、コンソール ハンドラとファイル ハンドラ フォーマットをクラス フォーマット オブジェクトとして設定します。私の場合、それは consoleHandler.format(new MyFormatter); です。filehandler.format(新しい Myformatter);

最も重要なことは、logger.setUseParentHandler(false); を設定する必要があることです。

これで準備完了です。

于 2016-10-05T12:47:35.533 に答える
0

私があなたを正しく理解しているなら、あなたは削除INFOして、持っているだけtest 1ですか?

もしそうなら、ありえないと思います。その理由は、これがどのタイプのメッセージであるかを知る必要があるからです。

ERROR
WARNING
INFO
DEBUG
TRACE

必要に応じて、WARNING 以上のみを表示するようにレベルを変更できます。

于 2011-08-01T12:12:54.150 に答える