【问题标题】:Commons logging to use java.util.logging使用 java.util.logging 的 Commons 日志记录
【发布时间】:2011-07-04 17:41:51
【问题描述】:

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

LogTest.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 日志记录。

【问题讨论】:

    标签: java log4j java.util.logging


    【解决方案1】:

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

    查看How to use 'Apache Commons Logging' with '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,more loggers are available out of the box

    【讨论】:

    • 感谢分享我的博客链接!
    • 这可行(一个简单的 Java 项目)。但是对 Eclipse/STS 中的 Maven 项目进行相同的尝试却没有。尝试将日志配置文件(我将所有配置放在 commons-logging.properties 本身中)放在“src/main/resources”和“src/main/java”以及项目的根目录中,它没有被拾取。在这种情况下,使用 maven 时的类路径是什么?
    • src/main/resources 应该是正确的。如果它不起作用,您需要验证您对类路径中包含的内容的假设。您可能还想通过打开 jar/war 来验证所有内容是否正确打包,以确保文件在您期望的位置。
    【解决方案2】:
    # Loggers and Handlers may override this level
    

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

    【讨论】:

    • 对不起。这没有用。还有我的 src/main/resources/commons-logging.properties 内容: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
    【解决方案3】:

    在您的类路径中创建 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日志将appender所有被org.apache.commons.logging.*使用的日志;

    示例:spring、hibernate、struts 等

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2010-11-20
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多