2016-02-15 1 views
0

Я использую java.util.logging. Я хочу 2 журнала - один для измерения времени и один для всех других вещей. Проблема в том, что таймер-регистратор все еще регистрирует все, как я могу сказать, что он регистрирует только то, что я отправляю методу logTime?Java Logger записывает все

import configurations.ConfigReader; 

import java.io.File; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.logging.*; 

import configurations.Time; 
import main.Main; 
/** 
* Created by giladba on 27/01/2016. 
*/ 
public class LogManager { 
    private static final String LOGS_PATH = (String) ConfigReader.get(ConfigReader.Field.LOGS); 
    private static Logger globalLogger = Logger.getLogger(Main.class.getName()); 
    private static Logger timingLogger = Logger.getLogger(Main.class.getName()); 

    static { 
     initLoggers(globalLogger, (String) ConfigReader.get(ConfigReader.Field.ST_VIEW)); 
     initLoggers(timingLogger, ConfigReader.get(ConfigReader.Field.ST_VIEW) + "_timing"); 
     timingLogger.setUseParentHandlers(false); 
    } 

    public synchronized static void log(String message) { 
     globalLogger.info(message); 
    } 

    public synchronized static void logTime(String action, long time1, long time2) { 
     timingLogger.info(Time.getTimeNowFormatted() + action + "\t\t : " + (time2-time1) + " ms"); 
    } 

    /** 
    * Initializes the logger. 
    * @throws SecurityException 
    * @throws IOException 
    */ 
    private static void initLoggers(Logger curLog, String name) throws SecurityException { 
     FileHandler procHandler = null; 
     try { 
      File file = new File(LOGS_PATH); 
      if(!file.exists()) 
       file.mkdirs(); 
      procHandler = new FileHandler(LOGS_PATH + name + "_log.out", 2048000, 20, true); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     procHandler.setFormatter(new MyFormatter()); 

     procHandler.setLevel(Level.INFO); 

     curLog.addHandler(procHandler); 
     curLog.setUseParentHandlers(true); 
     curLog.info("\n"); 
     curLog.info("--------" + (new SimpleDateFormat("dd-MM-yy_HH:mm:ss")).format(new Date()) + "--------"); 
    } 

    /** 
    * simple naked formatter for the log files. 
    * @author jeremieg 
    * 
    */ 
    static class MyFormatter extends Formatter { 

     @Override 
     public String format(LogRecord arg0) { 
      return arg0.getMessage() + "\n"; 
     } 
    } 
} 
+1

Где находится ваш регистрационный конфигуратор? Кроме того: вы можете решить, подходит ли вам другая платформа, например slf4j или log4j/log4j2. – Marged

+0

Действительно переключитесь на современную структуру, такую ​​как SLF4J. – Stefan

+1

Какие конфигурации вы имеете в виду? если вы говорите о ConfigReader, то все, что он делает, возвращает путь к каталогу, в который я хочу поместить журналы. –

ответ

2
private static Logger globalLogger = Logger.getLogger(Main.class.getName()); 
private static Logger timingLogger = Logger.getLogger(Main.class.getName()); 

То есть один и тот же регистратор, и в результате, ваша конфигурация путается.

Вы должны указать два разных имени: Logger.getLogger, чтобы получить два разных регистратора.

+0

Это сделало трюк, спасибо. –

Смежные вопросы