每次程序重复时,我的Java记录器都会生成一个新的日志文件

时间:2018-01-05 21:40:46

标签: java logging

if (outcome == 1) {
    Logger logger = Logger.getLogger("MyLog");
    FileHandler fh = new FileHandler("C:\\Temp\\Dice_Roll_J\\Logs.txt", true);
    logger.addHandler(fh);
    logger.setLevel(Level.ALL);
    SimpleFormatter formatter = new SimpleFormatter();
    fh.setFormatter(formatter);
    logger.log(Level.INFO, "Outcome 1.");                        
} 

if (outcome == 2) {
    Logger logger = Logger.getLogger("MyLog");
    FileHandler fh = new FileHandler("C:\\Temp\\Dice_Roll_J\\Logs.txt", true);
    logger.addHandler(fh);
    logger.setLevel(Level.ALL);
    SimpleFormatter formatter = new SimpleFormatter();
    fh.setFormatter(formatter);
    logger.log(Level.INFO, "Outcome 2");
}

这个程序是一个while循环,每次进入if语句并将信息记录到文件中,它就会这样做。但问题是它还会生成另一个名为Logs.txt.1的文件,如果我再次滚动它,Logs.txt.2等等。它还生成名为Logs.txt.lck的文件。

我该如何解决这个问题?任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

你好像使用这个constructor权利,我唯一的猜测是前一个处理程序仍然拥有该文件,所以新的处理程序只是创建一个新文件。尝试在循环外部只创建一个处理程序,并将其用于记录目的。

答案 1 :(得分:0)

    Logger logger = Logger.getLogger("MyLog");
    FileHandler fh = new FileHandler("C:\\Temp\\Dice_Roll_J\\Logs.txt", true);
    logger.addHandler(fh);
    logger.setLevel(Level.ALL);
    SimpleFormatter formatter = new SimpleFormatter();
    fh.setFormatter(formatter);

将其移出循环外的每个if语句,以便剩下的唯一内容是if语句中的logger.log(Level.INFO, "Outcome x");,然后放入fh.close();