gpt4 book ai didi

java - 为某些记录器设置日志级别,但不为其他记录器设置日志级别

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:18:59 24 4
gpt4 key购买 nike

我正在开发一个 Java 应用程序,它使用 java.util.logging 来满足其日志记录需求。此应用程序使用大量外部库(JDBC、JMS 客户端、JSR-160 实现等),其中一些还使用 java.util.logging。

当我在命令行上指定一个标志时,我想将 my Loggers 的日志级别设置为 ALL,但到目前为止,我只找到了为所有 loggers 设置级别的方法,而不仅仅是我的。

我的记录器都称为“com.mycompany.myapp.SomeClass”,当我将“com.mycompany.myapp”的级别设置为 ALL 时,不会记录任何额外信息。当我将根记录器的级别设置为 ALL 时,所有记录器的所有信息都会记录到控制台,信息量太大了!

如何将我自己的记录器设置为全部而不让所有其他记录器淹没我的日志文件?

最佳答案

实际上,我不确定您为什么会遇到上述问题。我已经创建了一个简单的 JUnit 测试(如下),并且日志级别的设置完全符合我的预期(这似乎也符合您预期的工作方式)。

您是否正在尝试在您的自定义记录器中记录级别低于 INFO 的消息?从我包含的测试中可以看出,默认日志记录处理程序默认设置为 INFO。您需要更改该处理程序的级别才能看到 FINE 消息(也显示)。

import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.Test;

public class SimpleLoggerTest {

private void logMessages(Logger logger) {
logger.warning(getLoggerName(logger) + ": warning message");
logger.info(getLoggerName(logger) + ": info message");
logger.fine(getLoggerName(logger) + ": fine message");
}


private String getLoggerName(Logger logger) {
String loggerName = logger.getName();
if (loggerName.isEmpty()) {
return "[root logger]";
}
return loggerName;
}

private void listHandlerLevels(Logger logger) {
for (Handler handler : logger.getHandlers()) {
logger.info(getLoggerName(logger) + ": handler level = " + handler.getLevel());
}
Logger parentLogger = logger.getParent();
if (null != parentLogger) {
for (Handler handler : parentLogger.getHandlers()) {
logger.info("parent logger handler (" + getLoggerName(parentLogger) + "): handler level = " + handler.getLevel());
}
}
}

private void setHandlerLevels(Logger logger, Level level) {
for (Handler handler : logger.getHandlers()) {
handler.setLevel(level);
}
Logger parentLogger = logger.getParent();
if (null != parentLogger) {
for (Handler handler : parentLogger.getHandlers()) {
handler.setLevel(level);
}
}
}
@Test
public void testLoggingLevel() {
Logger myLogger = Logger.getLogger(SimpleLoggerTest.class.getName());
Logger rootLogger = myLogger.getParent();

// list the default handler levels
listHandlerLevels(myLogger);
listHandlerLevels(rootLogger);

// log some messages
logMessages(myLogger);
logMessages(rootLogger);

// change the logger levels
myLogger.setLevel(Level.ALL);
rootLogger.setLevel(Level.WARNING);

// list the handler levels again
listHandlerLevels(myLogger);
listHandlerLevels(rootLogger);

// log some messages (again)
logMessages(myLogger);
logMessages(rootLogger);

// change Handler levels to FINE
setHandlerLevels(myLogger, Level.FINE);

// list the handler levels (last time)
listHandlerLevels(myLogger);
listHandlerLevels(rootLogger);

// log some messages (last time)
logMessages(myLogger);
logMessages(rootLogger);
}
}

产生这个输出...

May 13, 2009 10:46:53 AM SimpleLoggerTest listHandlerLevels
INFO: parent logger handler ([root logger]): handler level = INFO
May 13, 2009 10:46:53 AM java.util.logging.LogManager$RootLogger log
INFO: [root logger]: handler level = INFO
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
WARNING: SimpleLoggerTest: warning message
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
INFO: SimpleLoggerTest: info message
May 13, 2009 10:46:53 AM java.util.logging.LogManager$RootLogger log
WARNING: [root logger]: warning message
May 13, 2009 10:46:53 AM java.util.logging.LogManager$RootLogger log
INFO: [root logger]: info message
May 13, 2009 10:46:53 AM SimpleLoggerTest listHandlerLevels
INFO: parent logger handler ([root logger]): handler level = INFO
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
WARNING: SimpleLoggerTest: warning message
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
INFO: SimpleLoggerTest: info message
May 13, 2009 10:46:53 AM java.util.logging.LogManager$RootLogger log
WARNING: [root logger]: warning message
May 13, 2009 10:46:53 AM SimpleLoggerTest listHandlerLevels
INFO: parent logger handler ([root logger]): handler level = FINE
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
WARNING: SimpleLoggerTest: warning message
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
INFO: SimpleLoggerTest: info message
May 13, 2009 10:46:53 AM SimpleLoggerTest logMessages
FINE: SimpleLoggerTest: fine message
May 13, 2009 10:46:53 AM java.util.logging.LogManager$RootLogger log
WARNING: [root logger]: warning message

这就是我在 my other response 中试图传达的内容.

关于java - 为某些记录器设置日志级别,但不为其他记录器设置日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com