Java Logging - 我的日志文件在哪里?

时间:2012-02-26 22:42:22

标签: java java.util.logging

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

我在Windows XP上的Eclipse 3.7.1中使用Java Logging - java.util.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是整数。

我在该目录中有5个不同的java.log个文件,java0.logjava4.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吗?或者重启电脑?只是好奇。对我来说,找到我的日志文件实际位置并不是什么大不了的事。

7 个答案:

答案 0 :(得分:16)

您的logging.properties文件位于何处?它应该在类路径的根目录中可用。作为完整性检查,以下代码打印了什么?

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

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

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

答案 1 :(得分:2)

.log文件位于\ workspace.metadata文件夹中。我正在使用Eclipse 4.2。 只是一个努力帮助其他新手的菜鸟。

答案 2 :(得分: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后,将按照文件中的指定生成日志。

答案 3 :(得分:1)

日志文件的位置可以通过logging.properties文件进行控制。它可以作为JVM参数传递: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写了简短的#34;人类可读的#34;日志记录摘要。

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

java -Djava.util.logging.config.file=/scratch/user/config/logging.properties

答案 4 :(得分:0)

如果为null,则文件路径将是您的eclipse主目录。您的logging.properties文件没有被系统淹没,因此将属性文件指向完整路径,如下所示,然后您的日志文件将在您更喜欢的地方直接生成。 -Djava.util.logging.config.file = D:\ keplereclipse \ keplerws \ NFCInvoicingProject \ WebContent \ WEB-INF \ logging.properties

答案 5 :(得分:0)

似乎默认位置已更改。要查找日志文件,请使用您的应用程序打开Java控制台。在那里按“s”。这将打印出System- and Deployment-Properties,您可以在其中找到类似的内容:

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

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

答案 6 :(得分:0)

  1. Debug the your variable or logger.getHandlers(): just for the instances of FileHandler, and look for its private field: files
  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方法之前完成。您还可以使用System.setProperty("java.util.logging.config.file", file)在main方法中重新初始化它,该方法将调用LogManager.readConfiguration()