0

重複の可能性:
log4j を使用して Java でランタイム例外をログに記録する

デスクトップアプリケーションを開発しています。Log4j を使用してログを書きました。でログを書き込むにはどうすればよいNullPointerExceptionですか? 私はそれが起こるとは予測していませんでした。

4

4 に答える 4

1

構成が問題ないと仮定して、例外をログに出力する方法だけを意味する場合:

try {
     ....something
} catch(RuntimeException e) {
     log.error("Got unexpected exception", e);
}

NullPointerException は RuntimeExepction から継承されるため、上記のコードを使用して安全にキャッチできます。上記のコードは、Exception から継承されているが RuntimeException から継承されていない例外をキャッチしません。

于 2012-10-31T02:18:25.960 に答える
1

私があなたの質問を正しく理解していれば、Try catch ステートメントをコード全体に配置して NullPointer Exception を処理することは想定されていないため、望ましくありません。

簡単な処理方法は、操作にオブジェクト参照を使用する前に null チェックを入れることです。また、これらの null チェックは、他の例外またはエラー シナリオが原因で初期化されない可能性があると予想されるオブジェクトにのみ配置してください。

すなわち

if (objectReference!=null)
           objectReference.CallSomeMethod();

もう一つの例

String listofDefaulters =null;
  String defaulters = getDefauter();
/**you might expect that you will always get defaulters from the method call but it might happen dat it can return null value also. 
 So always put a null check where you are not 100% sure if value will not be null**/
  if (defaulters !=null)
     defaulters.doSomeOperation();
于 2012-10-31T02:18:46.450 に答える
0

実行したい場合は、ログを含めて実行するaspect oriented programmingためのアドバイスを以下に記述してください。ExceptionNullPointerException

 @Aspect
 public class ExceptionLogging {
   private static Logger log = null;

   @Pointcut ("call(* *.*(..)))
   public void exceptionLogMethods(){
   }

   @AfterThrowing(pointcut="exceptionLogMethods()", throwing="e")
   public void handleException(Throwable ex, JoinPoint jointPoint) {
      log = Logger.getLogger(jointPoint.getThis().getClass());
      log.debug(jointPoint.getThis().getClass() + ex.getMessage());
   }
  }
于 2012-10-31T02:25:27.360 に答える
0

例外とメッセージをカスタマイズするためPreconditionsに、Guava ライブラリでもこのクラスを使用できます。

参照がの場合、メソッドPreconditions#checkNotNull(T, java.lang.Object)は a をスローします。NullPointerExceptionTnull

void method(String name) {
    Preconditions.checkNotNull(name, "The name is null.");

    // do something with the name
}

void otherMethod() {
    try {
        method("zerone"); // OK
        method(null); // throws NPE
    } catch(RuntimeExcetion e) {
        LOG.error(e.getMessage(), e);  // Message: "The name is null."
    }
}
于 2012-10-31T02:32:03.790 に答える