[英]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.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 吗? 还是重启电脑? 只是好奇。 这对我来说并不像找出我的日志文件的实际位置那么重要。
您的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
在那里你会找到你的日志文件。
logger.getHandlers()
:仅针对 FileHandler 的实例,并查找其私有字段: filesC:\\Windows\\
。反射,同技巧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)); } }
日志管理器将在 JVM 启动期间初始化,并在 main 方法之前完成。 您还可以使用System.setProperty("java.util.logging.config.file", file)
在 main 方法中重新初始化它,这将调用LogManager.readConfiguration()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.