3

使っていますjava.util.logging

私はfoo関数を持っています:

public String foo() {
    System.out.println("syso ==> foo");
    return "foo";
}

ログレベルを変更しても、fooが実行されることはありません。

Logger logger = Logger.getLogger(MyClass.class.getSimpleName());
FileHandler fileHandler = new FileHandler("myapp.log");
logger.addHandler(fileHandler);
logger.setLevel(Level.SEVERE);
logger.info("Write foo: " + foo() );
logger.severe("Test severe");

logger.info()がログファイルに出力されないことはわかっていますが、なぜ実行するのfoo()ですか?どうすれば解決できますか?

ありがとう

4

4 に答える 4

1

logger.infoinfoを無効にしても、その行がコンパイラとリンカに「見えなくなる」ことはありません。この行は引き続き実行され、呼び出しをfoo行うと実行されます。

Loggerメソッドを使用して、情報レベルが有効になっているかどうかを確認する必要があります。log.info

使用するよりもapacheloggerを使用している場合:

if (logger.isInfoEnabled()) {
    logger.info("Write foo: " + foo() );
}
于 2013-02-27T10:06:59.780 に答える
1

そのテキストは表示されませんが、その行はコメントではないため、その行は実行されます。

Apache Loggerを使用している場合は、次のLogger.isInfoEnabled()方法を使用してみてください。-

if(logger.isInfoEnabled()){
    logger.info("Write foo: " + foo() );
}

それ以外の場合、そのjdkロガーの場合は、 @n1ckolasによって提案されている以下の方法を使用します

if (logger.isLoggable(Level.INFO)) {
    logger.info("Write foo: " + foo() );
}
于 2013-02-27T10:08:47.563 に答える
1

Logger.info引数Stringが必要です。

"Write foo: " + foo()メソッドString内でロギングレベルがチェックされる前であっても、はに変換されます。info

このプロセスでfoo()は、それが返されるように実行されStringます。

これを解決するには、次の構成を使用できます。

if (logger.isLoggable(Level.INFO)) {
    logger.info("Write foo: " + foo());
}
于 2013-02-27T10:09:07.010 に答える
1

java.util.logging.*クラスを使用しているようです。次に、これでうまくいくはずです。

if (logger.isLoggable(Level.INFO)) {
    logger.info("Write foo: " + foo() );
}

Log4Jを使用している場合は、

if (logger.isInfoEnabled()) {
    logger.info("Write foo: " + foo() );
}
于 2013-02-27T10:12:30.543 に答える