2

我正在尝试使用公共日志记录并希望使用 java.util.logging 作为底层机制。

日志测试.java

import org.apache.commons.logging.*;

public class LogTest { 

        public static void main(String args[]) {
            System.setProperty("java.util.logging.config.file","log.properties");
            Log logger = LogFactory.getLog(LogTest.class);
            logger.trace("trace msg");
        }
}

我有 src/main/resources/log.properties (我正在使用 maven 项目)

handlers=java.util.logging.ConsoleHandler

# Default global logging level.
# Loggers and Handlers may override this level
.level=ALL

我看不到任何输出。请告诉我如何以编程方式设置 log.properties 以利用 java 日志记录。

4

4 回答 4

4

您需要指定一个实现 Log 接口的记录器。在这种情况下,Jdk14Logger

查看如何将“Apache Commons Logging”与“Java SE Logging”一起使用?更多细节。

除了链接:

将“ commons-logging.properties”文件放入应用程序的类路径中。该文件的内容应如下所示: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger 设置此属性会指示 Commons-Logging 使用 JDK Logger(即 Java SE Logger)作为 Log 实现。

然后放入log-config.properties您的类路径并进行相应配置。

如果您决定在未来更改 impls,更多的记录器可以开箱即用

于 2013-01-24T21:12:12.857 回答
0
# Loggers and Handlers may override this level

尝试添加java.util.logging.ConsoleHandler.level=ALL您的 log.properties。

于 2011-02-26T07:47:17.793 回答
0

在你的类路径中创建commons-logging.properties

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger

在 Logger 实例之前设置java.util.logging.config.file :

System.setProperty("java.util.logging.config.file","log.properties");

然后 JDK 日志记录将附加org.apache.commons.logging.* 使用的所有日志;

例如:spring、hibernate、struts 等。

于 2014-07-31T08:57:48.737 回答
0

虽然 Snekse 的回答基本上是正确的,但有一点需要纠正/澄清:

  1. 正确:commons-logging 从类路径中搜索其属性文件。因此,必须在类路径中找到 commons-logging.properties
  2. 不正确:JDK 记录器(JUL-logger)通过 FileInputStream 加载其配置(它适用于文件系统对象而不是类路径)。请参阅 java.util.logging.LogManager.readConfiguration()。因此,“java.util.logging.config.file”的 System-Property 值必须是绝对路径或相对于实际执行目录。
于 2019-12-17T15:14:17.900 回答