这是我的代码,我想知道为什么它没有记录任何东西。当我输入控制台时,它说:
您好
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);
}
}
}
答案 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。