使用 java.util.logging 进行 Commons 日志记录

发布于 2024-10-19 20:13:09 字数 703 浏览 7 评论 0原文

我正在尝试使用公共日志记录并希望使用 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 日志记录。

I am trying to use commons logging and want to use java.util.logging as underlying mechanism.

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");
        }
}

I have src/main/resources/log.properties ( I am using maven project )

handlers=java.util.logging.ConsoleHandler

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

I am not able to see any output.
Please tell me how to programatically set the log.properties to leverage java logging.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

献世佛 2024-10-26 20:13:09

您需要指定一个实现 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 放入类路径中并进行相应配置。

如果您决定将来更改 impl,更多开箱即用的记录器

You need to specify a logger that implements the Log interface. In this case, the Jdk14Logger.

Check out How to use 'Apache Commons Logging' with 'Java SE Logging'? for more details.

Except from link:

Put "commons-logging.properties" file in your application's classpath.
The contents of this file should look like:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
Setting this property instructs Commons-Logging to use JDK Logger
(i.e. Java SE Logger) as the Log implementation.

Then put log-config.properties in your classpath and configure accordingly.

If you decide to change impls in the future, more loggers are available out of the box.

浮华 2024-10-26 20:13:09
# Loggers and Handlers may override this level

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

# Loggers and Handlers may override this level

Try adding java.util.logging.ConsoleHandler.level=ALL in your log.properties.

是你 2024-10-26 20:13:09

在类路径中创建 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 等。

create commons-logging.properties in your classpath:

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

set java.util.logging.config.file before you instance of Logger:

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

then the JDK logging will be appender all logs which used by org.apache.commons.logging.*;

example: spring, hibernate, struts etc.

怀里藏娇 2024-10-26 20:13:09

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

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

While Snekse's answer is basically correct, there is one point to correct/clarify:

  1. Correct: commons-logging searches its property file from classpath. Thus, commons-logging.properties must be found in the classpath
  2. Not correct: the JDK logger (JUL-logger) loads its configuration through a FileInputStream (which works on file system objects and not on classpath). See java.util.logging.LogManager.readConfiguration(). Thus, the System-Property value of "java.util.logging.config.file" must either be an absolute path or relative to the actual execution directory.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文