我想改变一个类的日志级别(为了讨论起见,我们把它叫做 "SEVERE")。com.example.foo
)至 SEVERE
但只针对ConsoleHandler,我希望FileHandler级别保持不变。INFO
.
有没有办法在java.util.logging属性文件中做到这一点?
取决于你使用的LogManager。 假设这是标准的 日志管理器 你可以使用ConsoleHandler的所有实例。
com.example.foo.level=INFO
com.example.foo.handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = SEVERE
java.util.logging.FileHandler.level = INFO
如果你只想调整ConsoleHandler的一个实例,那就比较复杂了,因为它总是涉及到你的项目中的一些日志代码。 以下是可以选择的选项。
package com.example;
public ConsoleHandler1 extends ConsoleHander {
}
然后在你的属性文件中看起来像:
com.example.foo.level=INFO
com.example.foo.handlers=java.util.logging.FileHandler,com.example.ConsoleHandler1
java.util.logging.ConsoleHandler.level = INFO
com.example.ConsoleHandler1.level = SEVERE
java.util.logging.FileHandler.level = INFO
config
选项。 根据文档。一个名为 "config "的属性 这个属性的目的是允许运行任意的配置代码。该属性定义了一个以空格或逗号分隔的类名列表。每一个命名的类都会创建一个新的实例。每个类的默认构造函数可以执行任意代码来更新日志记录配置,例如设置记录器级别、添加处理程序、添加过滤器等。
配置类的形式非常自由,你甚至可以读取自己的 自定义日志管理器属性. 一个实例类是: 。
package com.example;
import java.util.logging.*;
public class FooLoggerConsoleSevere {
public static final Logger logger = Logger.getLogger("com.example.foo");
public FooLoggerConsoleSevere() {
ConsoleHandler con = new ConsoleHandler();
con.setLevel(Level.SEVERE);
logger.addHandler(con);
}
}
然后像这样运行配置。
config=com.example.FooLoggerConsoleSevere
com.example.foo.level=INFO
java.util.logging.FileHandler.level = INFO