2011-08-01 16 views
2

ログファイルに余分なメッセージを削除することができます。どのように我々は、私はつまり、単純なログ記録プログラムを持っている

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メインをおよびINFO を入力し、コードで記録されたデータのみを保持します。 私は何ができますか?

答えて

0

私が正しく理解している場合は、INFOを削除し、test 1などが必要ですか?

これが当てはまる場合、私はその可能性は考えていません。その理由は、これがどのタイプのメッセージであるかを知る必要があるからです。

ERROR 
WARNING 
INFO 
DEBUG 
TRACE 

レベルを変更して、必要に応じて警告とそれ以降の表示のみを表示することができます。

+0

の簡易版は、これはlog4jのではないTC1 @、私はこれを行う方法です。これは 'java.util.logging'です。 – dogbane

+0

@dogbane彼はコメントを書いたときにlog4jとタグ付けしました。後で編集する必要があります。 – TC1

4

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 
2

クラスをフォーマッタクラスで次のように拡張します。

パブリッククラスMyFormatter extends Simpl eFormatter {

@Override

公共同期文字列の形式(たLogRecordレコード){

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

} 

}

はその後、メインクラスで、クラス形式のオブジェクトとしてコンソールハンドラーとのFileHandler形式を設定しました。 私の場合は、consoleHandler.format(new MyFormatter)です。 filehandler.format(新しいMyformatter);

ほとんどのものは設定する必要があります logger.setUseParentHandler(false);

今すぐお越しいただけます。ここで

0

はSimpleFormatter

package org.nibor.git_merge_repos; 

import java.util.Date; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 


public class CustomLogFormatter extends Formatter { 

    private final Date dat = new Date(); 

    private static final String seperator = " : "; 

    public synchronized String format(LogRecord record) { 
     dat.setTime(record.getMillis()); 
     return dat + seperator + record.getLevel().getName() + seperator + record.getMessage() + "\n"; 

    } 
} 
関連する問題