【问题标题】:Java Logger Makes New txt File EverytimeJava Logger 每次都生成新的 txt 文件
【发布时间】:2018-01-04 20:13:51
【问题描述】:

#其他代码和随机发生器

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

这应该在 txt 文件中添加更多文本,它确实如此。但是,它还会生成另一个名为 Log.txt.1 的 txt 文件,然后如果我再次滚动它,Log.txt.2 等等。我该如何解决这个问题?

我们将不胜感激。

【问题讨论】:

  • 您是否在运行之间重新启动程序?
  • @stdunbar no 整个程序处于while循环中,有一个按钮可以退出。
  • 你能发布你的记录器道具文件吗?
  • 它只是一个txt文件。
  • 移动代码以在循环上方设置记录器。您正在添加一个新的文件处理程序的每个循环。

标签: java logging random


【解决方案1】:

您每次尝试登录时都会添加一个新的FileHandler。 只需执行一次!

您必须将您的Logger 设置和它的使用分开。

请注意,您的记录器必须声明为static final,否则它可能会被垃圾收集,您可能不得不重新设置它。

设置代码

private static final Logger logger = Logger.getLogger("MyLog");
static {
    FileHandler fh;
    try {
        fh = new FileHandler("C:\\Temp\\Dice_roll\\Logs.txt", true);
        logger.addHandler(fh);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
    } catch (SecurityException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    logger.setLevel(Level.ALL);
}

记录

if(outcome == 1){
    logger.log(Level.INFO, "Outcome 1.");
}

请注意,如果我是你,我宁愿使用configuration file

【讨论】:

  • 记录器必须声明为 static final 否则 FileHandler 将得到garbage collected and the logger setting are lost
  • @C.Champagne fh = new FileHandler("C:\\Temp\\Dice_roll\\Logs.txt", true); 这一行是错误的,错误是:unreported exception IOException; must be caught or declared to be thrown
  • @MasterHackerLOIS 这只是意味着您需要捕获一个可能的异常。查看我更新的代码。请注意,我仍然建议您改用配置。
  • @MasterHackerLOIS 顺便说一句,如果日志文件尚不存在,请不要忘记创建创建日志文件的目录;)
猜你喜欢
  • 2014-12-18
  • 1970-01-01
  • 2021-02-24
  • 2016-09-27
  • 2018-03-06
  • 1970-01-01
  • 2016-11-25
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多