我试图将文本从控制台记录到文本文件,并且没有创建文本文件

时间:2013-04-09 02:17:23

标签: java logging java.util.scanner java.util.logging

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

您好

2013年4月8日下午10:13:47 java.util.logging.LogManager $ RootLogger log

信息:您好

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

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的循环永远不会终止,这意味着JVM永远不会执行正确的关闭。只有在所有日志记录关闭挂钩正常执行时,FileHandler才会关闭并同步。数据可能已写入,但绝不是synched with the filesystem

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

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