有什么方法可以将一个类的java.util.logging级别设置为SEVERE,但只针对一个处理程序?

问题描述 投票:0回答:1

我想改变一个类的日志级别(为了讨论起见,我们把它叫做 "SEVERE")。com.example.foo)至 SEVERE但只针对ConsoleHandler,我希望FileHandler级别保持不变。INFO.

有没有办法在java.util.logging属性文件中做到这一点?

java logging java.util.logging
1个回答
1
投票

取决于你使用的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的一个实例,那就比较复杂了,因为它总是涉及到你的项目中的一些日志代码。 以下是可以选择的选项。

  1. 你可以创建一个ConsoleHandler的子类,作为一个具有公共无参数构造函数的公共类。 这个新的完全合格的类名为LogManager属性文件提供了一个独特的命名空间。 然后,您可以将该子类安装到您要调整的日志器上,而不是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
  1. 使用日志管理器 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
  1. 你可以在你的应用程序中写一个方法来定位 记录仪找到处理人换级.
© www.soinside.com 2019 - 2024. All rights reserved.