【问题标题】:Logger not logging all events?记录器没有记录所有事件?
【发布时间】:2016-07-12 11:58:48
【问题描述】:

我正在尝试通过定时添加方法来测试一些数据结构。

import java.io.IOException;
import java.util.Deque;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import edu.sdsu.cs.datastructures.LinkedList;
import edu.sdsu.cs.datastructures.SlowDeque;

public class DequeDriver<E> {
    final Logger myLogger = Logger.getLogger("***.****.**.DequeDriver");
    static FileHandler logFile;
    static SimpleFormatter formatterTxt;
    private Deque<E> dut;


    //              Construct the Deque and test it         //
    private DequeDriver() throws SecurityException, IOException {
        initLogger();
        myLogger.info("Running SlowDeque: ");
        dut = new SlowDeque<E>();
        runTest(dut);
        myLogger.info("Running with LinkedList: ");
        dut = new LinkedList<E>();
        runTest(dut);

    }
    //              Run tests on the Deque              //
    @SuppressWarnings("unchecked")
    private void runTest(Deque<E> dequeUnderTest){
        int testSize = 1000;
        long startTime;
        long endTime;
        for(int i = 1; i <= 10; i++){
            startTime = System.nanoTime();;
            for(long a = 0; a < testSize * i; a++){
                dequeUnderTest.add((E) new Long(a));
            }
            endTime = System.nanoTime();
            myLogger.info("Adding " + (i * testSize) + " items took: " + (endTime - startTime) + " milliseconds.");
        }

    }

    public static void main(String[] args) {
        try{
            new DequeDriver<Long>();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    void initLogger() throws SecurityException, IOException {
        disableConsoleLogger();
        logFile = new FileHandler("DequeDriver.xml");
        myLogger.setLevel(Level.INFO);
        myLogger.addHandler(logFile);
    }
    void disableConsoleLogger() {
        Logger rootLogger = Logger.getLogger("");
        Handler[] handlers = rootLogger.getHandlers();
        if (handlers[0] instanceof ConsoleHandler) {
          rootLogger.removeHandler(handlers[0]);
        }
    }
}

无论我如何更改 FileHandler() 方法中的 testSize 或输出文件名,我仍然只能得到“Running with...”输出和 runTests() 方法的两个输出:一个用于 1000,一个用于10000 项。

这有什么我不熟悉的方面吗?我的 IDE 是 Eclipse。

【问题讨论】:

  • 如果你想对代码进行基准测试,你应该真正考虑使用 JMH 而不是滚动自己的解决方案

标签: java eclipse debugging logging


【解决方案1】:

我用BlockingQueue 替换SlowDeque 测试了您的代码,并且日志记录工作正常。

确保LinkedListSlowDeque 的实现按他们的需要工作。

import edu.sdsu.cs.datastructures.LinkedList; import edu.sdsu.cs.datastructures.SlowDeque;

</record>
<record>
  <date>2016-03-24T13:06:36</date>
  <millis>1458846396265</millis>
  <sequence>9</sequence>
  <logger>DequeDriver</logger>
  <level>INFO</level>
  <class>DequeDriver</class>
  <method>runTest</method>
  <thread>1</thread>
  <message>Adding 9000 items took: 1512513 milliseconds.</message>
</record>
<record>
  <date>2016-03-24T13:06:36</date>
  <millis>1458846396267</millis>
  <sequence>10</sequence>
  <logger>DequeDriver</logger>
  <level>INFO</level>
  <class>DequeDriver</class>
  <method>runTest</method>
  <thread>1</thread>
  <message>Adding 10000 items took: 1547532 milliseconds.</message>
</record>
<record>
  <date>2016-03-24T13:06:36</date>
  <millis>1458846396267</millis>
  <sequence>11</sequence>
  <logger>DequeDriver</logger>
  <level>INFO</level>
  <class>DequeDriver</class>
  <method>&lt;init&gt;</method>
  <thread>1</thread>
  <message>Running with LinkedList: </message>
</record>
</log>

【讨论】:

  • 谢谢,感谢您的帮助。我修复了它,虽然问题是 eclipse 中的库。一旦我重新加载它们,它就会完美运行。
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 2015-12-15
  • 2021-09-19
  • 1970-01-01
  • 2015-08-24
  • 2013-09-17
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多