【问题标题】:I am trying to log text from the console to a text file, and the text file isn't being created我正在尝试将控制台中的文本记录到文本文件中,并且没有创建文本文件
【发布时间】:2013-04-09 02:17:22
【问题描述】:

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

你好

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

【问题讨论】:

  • 不想成为“那些”人中的一员,但您是否考虑过使用像 log4j 这样的专用日志库而不是内置日志记录类?

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


【解决方案1】:

您的循环永远不会终止,这意味着 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多