繁体   English   中英

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

[英]Java Logging - where is my log file?

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

我在 Windows XP 上的 Eclipse 3.7.1 java.util.logging使用 Java 日志记录 - 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 吗? 还是重启电脑? 只是好奇。 这对我来说并不像找出我的日志文件的实际位置那么重要。

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

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

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

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

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

可以通过 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 编写简短的“人类可读”的日志记录摘要。

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

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

提问者问题的根本原因是他的 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 后,将按照文件中的指定生成日志。

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

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

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

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

  1. 调试您的变量或logger.getHandlers() :仅针对 FileHandler 的实例,并查找其私有字段: 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM