2013-04-09 64 views
1

这是我的代码,我想知道为什么它没有记录任何内容。当我输入到调音台,它说:我正在尝试将文本从控制台记录到文本文件,并且未创建文本文件

你好

2013年4月8日下午10时十三分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); 
     } 
    } 
} 
+0

不想成为“那些”人之一,但你有没有考虑过使用像log4j这样的专用日志库而不是内置的日志类? – Catchwa 2013-04-09 04:59:43

回答

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