java - 我使用 FileHandler 创建了一个记录器类来将日志写入文件,但它只是打印到控制台
问题描述
我正在尝试创建一个 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 次。我没有收到任何错误消息,但所有输出都直接进入控制台。
解决方案
我没有收到任何错误消息,但所有输出都直接进入控制台。
在代码中使用printConfig来确定记录器树的状态。为了查看日志文件的输出,您需要以下内容:
- 文件处理程序无一例外地创建。从您的问题来看,这似乎是有效的。
- 您应该能够在程序运行时看到日志文件至少已创建(并且为空)。默认情况下,如果文件处理程序无法解析路径,它将抛出错误或在用户的主目录中创建一个名为
java0.log
. 如果您指定文件路径并且在运行程序之前目录不存在,通常会发生这种情况。 - 文件处理程序必须附加到可记录节点或父记录器的记录器树。如果从您的程序的角度来看,文件处理程序附加到子记录器,它将不会看到日志消息。日志记录沿记录器树向上传播到父处理程序。通常 ConsoleHandler 安装在根记录器上,因此它会看到与安装在根的子级上的文件处理程序不同的所有内容。
- 文件处理程序必须具有正确的级别。用于
Level.ALL
处理程序。 - 文件处理程序不应安装过滤器 (
null
)。JDK没有附带任何东西,所以这应该不是问题。 - 必须设置记录器级别,以便您实际为处理程序生成日志记录。
- 另一个功能删除或重置正在删除您的配置的日志管理器。SecurityManager 可以确定这一点,但这很可能不是原因,因为您不使用任何 3rd 方库。
回答这些问题,您应该能够确定为什么看不到日志文件。
推荐阅读
- java - 在 Dropwizard 2.0.0 中检索 Jetty 实例
- r - 美学到底指的是什么,我应该如何调整我的数据集以获得“正确的美学”?
- c# - 将旋转多边形内的内容传输到位图
- javascript - 文件下载后重新加载页面
- python - Werkzeug 中的 BrokenFilesystemWarning
- python - 将多个排序的链表合并为一个
- javascript - 如何使按钮在单击时更改背景和文本颜色
- regex - Notepad++ / BOOST 中的错误或我的正则表达式中的错误?
- ruby-on-rails - Rails Arel_table 通过范围连接多个表
- karate - 响应是 jpg 文件 - 如何在 KARATE 中编写请求?