有没有办法将一个类的java.util.logging级别设置为严重级别,但只针对一个处理程序?

有没有办法将一个类的java.util.logging级别设置为严重级别,但只针对一个处理程序?,java,logging,java.util.logging,Java,Logging,Java.util.logging,我想将一个类的日志记录级别(为了便于讨论,我们将其称为com.example.foo)更改为SEVERE,但仅限于控制台句柄;我希望FileHandler级别保持INFO 在java.util.logging属性文件中是否有这样做的方法?取决于您使用的LogManager。假设这是标准,您可以使用以下方法更改所有ConsoleHandler实例: com.example.foo.level=INFO com.example.foo.handlers=java.util.logging.FileH

我想将一个类的日志记录级别(为了便于讨论,我们将其称为
com.example.foo
)更改为
SEVERE
,但仅限于控制台句柄;我希望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的一个实例,那么它就更复杂了,因为它总是需要在项目中附带一些日志代码。以下是可供选择的选项:

  • 可以将ConsoleHandler的子类创建为具有公共无参数构造函数的公共类。这个新的完全限定类名为LogManager属性文件提供了唯一的命名空间。然后,将该子类安装到要调整的记录器,而不是ConsoleHandler。您需要的唯一处理程序越多,创建的子类就越多。例如:
  • package.com.example;
    公共控制台句柄1扩展了控制台句柄{
    }

    然后在您的属性文件中显示:

    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
    
  • 使用LogManager
    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
    
  • 您始终可以在应用程序中编写一个方法来定位and

  • 不,我知道如何为所有处理程序的类设置日志记录级别,但我想为一个处理程序的类设置日志记录级别。