【问题标题】:I created a logger class using FileHandler to write the log to a file, but instead it's only printing to console我使用 FileHandler 创建了一个记录器类来将日志写入文件,但它只是打印到控制台
【发布时间】:2019-11-05 22:16:08
【问题描述】:

我正在尝试创建一个 java 记录器文件,它将输出写入项目文件夹(NetBeans、MacOS)中的一个文件。我正在为一个学校项目做这个,所以我不能使用 Log4j。我已经查看了之前关于这个主题的问题并尝试实施这些解决方案,但我仍然没有看到任何成功。我是否需要扩展文件路径,或者是否有我遗漏的主要组件?朝着正确方向迈出的任何一步都会有所帮助,谢谢。

我尝试将文件路径从用户文件夹一直延伸到 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 次。我没有收到任何错误消息,但所有输出都直接转到控制台。

【问题讨论】:

  • 您在课堂上使用的 Logger 类,它来自任何 Logging API 吗?
  • 忽略我之前的评论。我可以知道如何将其称为另一个文件吗?
  • 我这样称呼它:LOGGER.log(Level.INFO, "{0} logged in", currentUser.getUsername());
  • 我的意思是,你如何执行其他类?其他类是否有自己的主要方法?如果可能,请同时发布其他课程的代码。

标签: java logging utility


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2013-10-18
    • 2021-08-17
    相关资源
    最近更新 更多