Java 配置log4j2以使不同包具有不同的日志级别

Java 配置log4j2以使不同包具有不同的日志级别,java,hibernate,log4j2,Java,Hibernate,Log4j2,我想配置log4j2来记录我的应用程序。我想用日志级调试记录我的应用程序,但用日志级错误休眠 我在这里查阅了文档:也阅读了其他站点,但无法解决正确配置log4j2的问题 public static void init(String name) { ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();

我想配置log4j2来记录我的应用程序。我想用日志级调试记录我的应用程序,但用日志级错误休眠

我在这里查阅了文档:也阅读了其他站点,但无法解决正确配置log4j2的问题

    public static void init(String name) {

        ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
        builder.setStatusLevel(Level.ERROR);
        builder.setConfigurationName("BuilderTest");
        builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
                .addAttribute("level", Level.DEBUG));

        AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
                .addAttribute("target",ConsoleAppender.Target.SYSTEM_OUT);
        appenderBuilder.add(builder.newLayout("PatternLayout")
                .addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
        appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL)
                .addAttribute("marker", "FLOW"));
        builder.add(appenderBuilder);

        builder.add(builder.newLogger("org.mypackage", Level.DEBUG)
                .add(builder.newAppenderRef("Stdout"))
                .addAttribute("additivity", false));

//        builder.add(builder.newLogger("org.hibernate", Level.ERROR)
//                .add(builder.newAppenderRef("Stdout"))
//                .addAttribute("additivity", false));

        builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));

        LoggerContext ctx = Configurator.initialize(builder.build());
        logger = ctx.getLogger(name);
    }
我尝试的是使用包名为每个包设置特定的日志级别,并尝试为记录器/根记录器设置不同的级别,但最终我得到的信息总是太多,例如我的调试消息和来自hibernate的调试消息,或者信息太少


如何正确配置log4j2以满足我的需要?

我已经找到了答案的解决方案。我不知道这是否是正确的方法,但它对我有效。下面是我的log4j2.xml,它是通过配置文件完成的,而不是通过编程完成的:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.mypackage" level="DEBUG"/>
        <Logger name="org.hibernate" level="ERROR"/>

        <Root level="DEBUG">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

这样,mypackage中的代码将记录在调试级别,hibernate将记录在错误级别。

为什么需要用Java代码配置log4j2?常规的配置文件选项是不够的?我发现它对我来说更方便。你为什么要问?为什么它更方便?这通常是最后的手段,这意味着日志记录配置很晚,并且很难诊断错误。只要接受并调整它。如果你推荐的话,我可以切换到其他使用文件的方法。这就是我来这里的目的:寻求帮助!只要我解决了我最初的问题,我就万事俱备。我想如果你花些时间仔细阅读上面的例子,会对你有很大帮助。我认为,在这里发布的任何答案都只是重复这些页面已经涵盖的内容。这看起来非常像正确且最简单的方式:-