2016-10-21 4 views
0

すべてをJULでログに記録し、すべてをログファイルに書き込むFileHandlerを設定しますが、FileHandlerと同じクラスにあるコンテンツのみをログに記録します。設定ファイルを使用せずにFileHandlerをグローバルに設定するにはどうすればよいですか?Java UtilログセットFileHandler global

答えて

0

logger.getParent()がnullを返すまで、Loggerの親を歩いて他のハンドラを見つけ出し、見つけたハンドラをすべて削除し、logger.setUserParentHandlers(true)を呼び出すことができます。 Logger.addHandler(myOwnHandler)を呼び出すルートLoggerインスタンスが見つかりました。各ロガーでlogger.setLevel(...)を呼び出して、ハンドラーがすべてのロギング・アクティビティーを確実に確認できるようにすることもできます。サンプルコードは次のとおりです。

private static final Logger LOGGER = Logger.getLogger(MyMainClass.class.getName()); 

static { 
    Logger logger = LOGGER.getParent(); 
    while(logger != null) { 
     Handler[] handlers = logger.getHandlers(); 
     if(handlers != null) { 
      for(Handler handler : handlers) { 
       logger.removeHandler(handler); 
      } 
     } 

     if(logger.getParent() == null) { 
      logger.addHandler(SystemErrHandler.newInstance()); 
     } 
     else { 
      logger.setUseParentHandlers(true); 
     } 

     if(logger.getName().startsWith("my.sample.package")) { 
      logger.setLevel(Level.ALL); 
     } 
     logger = logger.getParent(); 
    } 
} 
関連する問題