2016-02-15 22 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

这样做的窍门,谢谢。 –