:私は代わりに階層を定義し、RX-フローのうち、log.errorまたはlog.warnの明示的なロジックを使用して避けたかった
をlogj4に設定可能にするか、どこかのレベルを記録するためにどのような例外マッピングするための例外を別に
ここでは、この操作を行うことができる方法の非常に簡単な例です:
package example;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SomeClass {
private static final Logger log = LogManager.getLogger();
//Quick and dirty way to generate a map of exceptions to their log levels. Replace this with whatever method of configuration you prefer.
public static Map<String,String> getExceptionLvlMap(){
Map<String,String> exceptionToLvlMap = new HashMap<>();
exceptionToLvlMap.put("java.io.IOException", "WARN");
exceptionToLvlMap.put("java.lang.NullPointerException", "FATAL");
return exceptionToLvlMap;
}
public static void main(String[] args){
Map<String, String> lvlMap = getExceptionLvlMap();
try {
someOperation();
} catch (IOException e) {
log.log(Level.getLevel(lvlMap.get(e.getClass().getName())), "Something bad happened!", e);
}
try{
anotherOperation();
}catch(Throwable t){
log.log(Level.getLevel(lvlMap.get(t.getClass().getName())), "Something crazy happened!", t);
}
}
public static void someOperation() throws IOException{
throw new IOException("It's an IOException!");
}
public static void anotherOperation(){
String x = null;
//Generate a NPE
x.equals("foo");
}
}
log4j2.xml設定ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
出力:
23:24:50.217 [main] WARN example.SomeClass - Something bad happened!
java.io.IOException: It's an IOException!
at example.SomeClass.someOperation(SomeClass.java:40) ~[classes/:?]
at example.SomeClass.main(SomeClass.java:27) [classes/:?]
23:24:50.221 [main] FATAL example.SomeClass - Something crazy happened!
java.lang.NullPointerException: null
at example.SomeClass.anotherOperation(SomeClass.java:45) ~[classes/:?]
at example.SomeClass.main(SomeClass.java:33) [classes/:?]
キャッチこの例外とlogger.warn() ''でそれを自分でログ? –
例外をスローしてキャッチしないと、おそらくプログラムの実行が停止し、エラーが発生します。あなたは例外をキャッチし、Sergeiが提案した 'logger.warn(Exception e)'を使ってログに記録する必要があります。前と同じように実行を停止する必要がある場合は、ログに記録した後で例外を再度スローすることができます。 – clinomaniac
アイデアは次のとおりです:私はlog.errorまたはlog.warnの明示的なロジックをrx-flowから使用することを避けたいと思っていました。代わりにlogj4で設定可能な例外の階層を定義するか、 – ses