我使用FileHandler创建了一个logger类,以将日志写入文件,但它只是打印到控制台

我正在尝试创建一个Java记录器文件,该文件将输出写入项目文件夹(NetBeans,MacOS)中的文件。我正在为学校项目这样做,所以我不能使用Log4j。我已经回顾了有关此主题的先前提出的问题,并尝试实施这些解决方案,但是我仍然看不到任何成功。我需要扩展文件路径,还是缺少主要组件?朝正确方向迈出的任何一步都将有所帮助,谢谢。

我尝试将文件路径扩展到从users文件夹一直到netbeans中的单个项目文件夹。我看了很多资源和示例,但是我缺少的任何元素都无法找出。

public class log {
   private final static Logger LOGGER = 
Logger.getLogger(log.class.getName());
   private final static FileHandler handleLog = null;



   public static void start() throws IOException,SecurityException{
    FileHandler handleLog = new 
FileHandler("/Users/cassie/NetBeansProjects/GlobalConsulting- 
   userLog.%u.%g.txt",1024 * 1024,10,true);
    SimpleFormatter simple = new SimpleFormatter();
    handleLog.setformatter(simple);
    LOGGER.addHandler(handleLog);
    LOGGER.setLevel(Level.INFO);

   }

   public static void main(String[] args) throws IOException,SecurityException{
       start();
       LOGGER.info("------------------START--------------------");

   }
}

当我在另一个文件中调用它时,这就是我的操作方式。

LOGGER.log(Level.INFO,"{0} logged in",currentUser.getusername());

我希望的是,当程序运行时,输出(用户登录)将打印到项目文件夹中的日志文件,并且在重写之前将更新10次。我没有收到任何错误消息,但是所有输出都直接进入控制台。

wjli44 回答:我使用FileHandler创建了一个logger类,以将日志写入文件,但它只是打印到控制台

  

我没有收到任何错误消息,但是所有输出都直接进入控制台。

在代码中使用printConfig来确定记录器树的状态。为了查看输出到日志文件,您需要以下内容:

  1. 文件处理程序无例外地创建。从您的问题看来,这很有效。
  2. 您应该能够看到程序运行时至少已创建(并且为空)日志文件。默认情况下,如果文件处理程序无法解析路径,它将抛出错误或在名为java0.log的{​​{3}}中创建日志文件。如果在运行程序之前指定了文件路径并且目录不存在,通常会发生这种情况。
  3. 文件处理程序必须附加到可记录节点或父记录器的记录器树上。如果从您的程序角度将文件处理程序附加到子记录器,它将看不到日志消息。日志记录沿记录器树向上移动到父处理程序。通常,ConsoleHandler安装在root记录器上,因此它将看到与安装在root子目录上的文件处理程序不同的所有内容。
  4. 文件处理程序必须具有正确的级别。使用Level.ALL作为处理程序。
  5. 文件处理程序不应安装过滤器(null)。 JDK没有附带任何东西,因此这不应该成为问题。
  6. 必须设置记录器级别,以便您实际上在向处理程序生成日志记录。
  7. 另一个功能已删除或重置正在删除配置的日志管理器。 SecurityManager可以确定这一点,但这很可能不是原因,因为您没有使用任何第三方库。

回答这些问题,您应该能够确定为什么看不到日志文件。

本文链接:https://www.f2er.com/3156086.html

大家都在问