2017-08-22 21 views
0

WARNレベルのエラーMyExceptionを記録するlog4j(v 2)の設定方法は? MyException例外log4j設定によって捕捉され、現在のためERRORレベルで終わるさWARNレベルの `MyException`エラーを記録するlog4j2の設定方法

return map.get(id).toObservable() 
       .filter(Objects::nonNull) 
       .switchIfEmpty(Observable.error(new MyException("Happens"))) 
       .toSingle(); 

をスロー

参照コード(rxjava)の例。

私はあなたがあなたのコメントに提供する情報を含めています参考のため
+0

キャッチこの例外とlogger.warn() ''でそれを自分でログ? –

+0

例外をスローしてキャッチしないと、おそらくプログラムの実行が停止し、エラーが発生します。あなたは例外をキャッチし、Sergeiが提案した 'logger.warn(Exception e)'を使ってログに記録する必要があります。前と同じように実行を停止する必要がある場合は、ログに記録した後で例外を再度スローすることができます。 – clinomaniac

+0

アイデアは次のとおりです:私はlog.errorまたはlog.warnの明示的なロジックをrx-flowから使用することを避けたいと思っていました。代わりにlogj4で設定可能な例外の階層を定義するか、 – ses

答えて

0

:私は代わりに階層を定義し、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/:?] 
関連する問題