1

这是我的代码,我想知道为什么它没有记录任何内容。当我在控制台中输入时,它会说:

你好

2013 年 4 月 8 日晚上 10:13:47 java.util.logging.LogManager$RootLogger 日志

信息:你好

但是,没有任何内容被记录到任何文件中。

import java.io.IOException;
import java.util.Scanner;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class main {
    public static void main(String[] args) throws IOException{

        while (1 == 1) {
            String text;
            Scanner in = new Scanner(System.in);
            text = in.nextLine();
            FileHandler fileTxt;
            SimpleFormatter formatterTxt;
            Logger logger = Logger.getLogger("");
            logger.setLevel(Level.INFO);
            fileTxt = new FileHandler("../loggedText.txt");
            formatterTxt = new SimpleFormatter();
            fileTxt.setFormatter(formatterTxt);
            logger.addHandler(fileTxt);
            logger.info(text);
        }
    }
}
4

1 回答 1

0

您的循环永远不会终止,这意味着 JVM 永远不会执行正确的关闭。只有在所有日志关闭挂钩正常执行时,FileHandler 才会关闭和同步。数据可能已写入但从未与文件系统同步

让我们创建一个可以正常终止的更正示例:

public class main {

    private static final Logger logger = Logger.getLogger(""); //Prevent G.C.

    public static void main(String[] args) throws IOException {
        logger.setLevel(Level.INFO);
        FileHandler fileTxt = new FileHandler("../loggedText.txt");
        fileTxt.setFormatter(new SimpleFormatter());
        logger.addHandler(fileTxt);

        System.out.println("root.level " + logger.getLevel());
        System.out.println("FileHandler.level " + fileTxt.getLevel());
        Scanner in = new Scanner(System.in);
        String text;
        while (true) {
            System.out.print("Enter text: ");
            text = in.nextLine();
            if (text != null && !text.isEmpty() 
                    && !"quit".equalsIgnoreCase(text)) {
                logger.info(text);
            } else {
                System.out.println("Done!");
                break;
            }
        }
    }
}

将以下内容输出到控制台:

root.level INFO
FileHandler.level ALL
Enter text: hello
Nov 22, 2016 10:39:19 AM java.util.logging.LogManager$RootLogger log
INFO: hello
Enter text: quit
Done!

在文件系统上loggedText.txt包含:

Nov 22, 2016 10:39:19 AM java.util.logging.LogManager$RootLogger log
INFO: hello

如果您无法正常终止,则需要显式调用FileHandler.close()您创建的处理程序。

注意:记录的类名和方法名不正确,称为JDK-8152389

于 2016-11-22T16:53:09.150 回答