33

我无法找到我的日志文件。

java.util.logging在 Windows XP 上的 Eclipse 3.7.1 中使用 Java Logging。logging.properties我的文件的相关行是:

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level=INFO
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

据我所知,在我执行这两行之后:

Logger logger = Logger.getLogger("test"); 
logger.logp(Level.INFO, "myClass", "myMethod", "Alcatraz"); 

我的日志文件应该在C:\Documents and Settings\[My Windows ID]\javaX.log哪里X是一个整数。

java.log在该目录中有 5 个不同的文件,java0.log通过java4.log,但它们都不包含我的日志记录,甚至没有包含今天日期的记录。我做了一些谷歌搜索,发现Tracing and Logging这意味着我的日志应该位于不同的位置,c:\Documents and Settings\[My Windows ID]\Application Data\Sun\Java\Deployment\log. 那里有一个名为 的文件plugin5581819941091650582.log,但它本质上是空的:

<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
</log>

它的创建日期是上周。(我不确定是什么进程创建了它;我当然没有明确地创建它。)

那么我的日志文件在哪里呢?我想不出还有什么地方可以看。

另外,有谁知道修改什么时候logging.properties生效?如果我更改了日志级别或FileHandler.pattern,在我的程序看到更改之前会发生什么?仅仅保存更改logging.properties显然是不够的。我需要重新启动 Eclipse 吗?还是重启电脑?只是好奇。这对我来说并不像找出我的日志文件实际在哪里那么重要。

4

7 回答 7

19

你的logging.properties文件在哪里?它应该在类路径的根目录中可用。作为健全性检查,以下代码打印了什么?

System.out.println(getClass().getClassLoader().getResource("logging.properties"));

如果代码在static上下文中,请使用

System.out.println(ClassName.class.getClassLoader().getResource("logging.properties"));
于 2012-02-27T03:30:26.840 回答
3

.log文件在您的\workspace\.metadata文件夹中。我正在使用 Eclipse 4.2。

于 2013-08-02T02:58:45.990 回答
3

日志文件的位置可以通过 logging.properties 文件控制。它可以作为 JVM 参数 ex 传递:java -Djava.util.logging.config.file=/scratch/user/config/logging.properties

详情: https ://docs.oracle.com/cd/E23549_01/doc.1111/e14568/handler.htm

配置文件处理程序

要将日志发送到文件,请将 FileHandler 添加到 logging.properties 文件中的 handlers 属性。这将启用全局文件日志记录。

handlers= java.util.logging.FileHandler

通过设置以下属性来配置处理程序:

java.util.logging.FileHandler.pattern=<home directory>/logs/oaam.log
java.util.logging.FileHandler.limit=50000
java.util.logging.FileHandler.count=1
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

java.util.logging.FileHandler.pattern 指定输出文件的位置和模式。默认设置是您的主目录。

java.util.logging.FileHandler.limit 以字节为单位指定记录器写入任何一个文件的最大数量。

java.util.logging.FileHandler.count 指定循环通过多少个输出文件。

java.util.logging.FileHandler.formatter 指定文件处理程序类用于格式化日志消息的 java.util.logging 格式化程序类。SimpleFormatter 编写简短的“人类可读”的日志记录摘要。

要指示 java 使用此配置文件而不是 $JDK_HOME/jre/lib/logging.properties:

java -Djava.util.logging.config.file=/scratch/user/config/logging.properties
于 2017-01-31T05:30:14.530 回答
2

提问者遇到问题的根本原因是他的 logging.properties 文件没有被读取。
中指定的文件java.util.logging.config.file不是从类路径中读取的。相反,它是从相对于当前目录的文件系统中读取的。
例如,运行以下命令将从当前目录java -Djava.util.logging.config.file=smclient-logging.properties SMMain读取。smclient-logging.properties读取正确的 java.util.logging.config.file 后,将按照文件中的指定生成日志。

于 2016-07-19T05:26:56.710 回答
1

似乎默认位置已更改。要查找您的日志文件,请使用您的应用程序打开 Java 控制台。在那里按“s”。这会打印出系统和部署属性,您可以在其中找到类似的内容:

deployment.user.logdir = C:\Users\username\AppData\LocalLow\Sun\Java\Deployment\log

在那里你会找到你的日志文件。

于 2016-08-03T12:25:48.327 回答
0

如果它为空,那么文件路径将是您的 Eclipse 主目录。您的 logging.properties 文件没有被系统抓取,因此将属性文件指向完整路径,如下所示,然后您的日志文件将直接在您喜欢的位置生成。-Djava.util.logging.config.file=D:\keplereclipse\keplerws\NFCInvoicingProject\WebContent\WEB-INF\logging.properties

于 2013-12-29T11:17:11.307 回答
0
  1. 调试您的变量或logger.getHandlers():仅针对 FileHandler 的实例,并查找其私有字段:文件
  2. 确保您的记录器级别包括您的日志。
  3. 确保您的处理程序级别包括您的日志。
  4. 它将被发送到您的主目录。如果你的操作系统没有那个目录,比如windows 95/98/ME,文件应该保存到默认路径,比如C:\Windows\.
  5. 反射,同技巧1

    Field[] handlerFiles = handler.getClass().getDeclaredFields();
    AccessibleObject.setAccessible(handlerFiles, true);
    
    for (Field field : handlerFiles) {
        if (field.getName().equals("files")) {
            File[] files = (File[]) field.get(handler);
            System.out.println(Arrays.toString(files));
        }
    }
    
  6. 日志管理器将在 JVM 启动期间初始化并在 main 方法之前完成。您也可以在 main 方法中使用 重新初始化它System.setProperty("java.util.logging.config.file", file),这将调用LogManager.readConfiguration().

于 2019-01-28T15:36:39.777 回答