3

我使用 IBM Rational Application Developer (RAD) 创建了一个动态 Web 项目。我使用 java.util.logging 作为日志框架。我将 logging.properties 直接放在 WEB-INF/classes 中。

我面临的问题是,即使我把它放在 WEB-INF/classes 中,应用程序也无法加载 logging.properties。我在 WebSphere Application Server 管理员控制台中添加了以下通用 JVM 参数

-Djava.util.logging.config.file="logging.properties"

我在 servlet init 方法中添加了以下代码片段。

Properties prop = System.getProperties();
prop.setProperty("java.util.logging.config.file", "logging.properties");

System.out.println("Is file exists " + file.exists());
try {
    LogManager.getLogManager().readConfiguration();
} catch (IOException ex) {
    ex.printStackTrace();
}

我在 logging.properties 中关闭了控制台级别的调试,所以我不应该在控制台中登录。但是目前我在控制台中获取日志,而不是在我在 logging.properits 中提到的日志文件中。

日志记录属性

#------------------------------------------
# Handlers
#-----------------------------------------
handlers=java.util.logging.ConsoleHandler,java.util.logging.FileHandler

# Default global logging level
.level=ALL

# ConsoleHandler
java.util.logging.ConsoleHandler.level=OFF
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

# FileHandler
java.util.logging.FileHandler.level=FINE

# Naming style for the output file:
java.util.logging.FileHandler.pattern=${SERVER_LOG_ROOT}/nyllogs/loadData.log

# Name of the character set encoding to use
java.util.logging.FileHandler.encoding=UTF8

# Limiting size of output file in bytes:
java.util.logging.FileHandler.limit=25000000

# Number of output files to cycle through
java.util.logging.FileHandler.count=2

# Style of output (Simple or XML):
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

请让我知道为什么应用程序无法获取 logging.properties 文件?

4

2 回答 2

2

在 WebSphere 服务器中,您尝试执行的操作将不仅更改应用程序的日志配置,而且更改整个服务器的日志配置。由于 WebSphere 本身使用 java.util.logging,这意味着 WebSphere 内部记录的所有内容都与应用程序日志位于同一个文件中。那将毫无意义,因为您也可以使用标准的 WebSphere 日志文件(SystemOut.logtrace.log)。

此外,由于 WebSphere 安装了自己的LogHandler,它很可能会禁止使用该readConfiguration()方法。

于 2013-04-11T16:53:11.017 回答
0

使用readConfiguration(is)从输入流中读取配置。您的代码设置了一个具有相对路径的属性,但 JVM 无法查看它。

Properties prop = System.getProperties();
prop.setProperty("java.util.logging.config.file", "logging.properties");

不带参数调用 readConfiguration() 方法只会重新加载属性,由于您的路径是相对的,因此可能不会加载这些属性。

public void readConfiguration()
                       throws IOException,SecurityException
Reinitialize the logging properties and reread the logging configuration.

使用属性的绝对路径或传递Inputstream. 这是一个从文件加载属性并使用InputStream.

于 2013-04-11T06:39:34.507 回答