猿问

未遵循 Java log4j2 记录器级别

因此,我正在尝试学习 log4j2 并将我的头脑围绕在记录器及其级别和父母传播上。


目前我的源层次结构运行是:


├── main

│   ├── java

│   │   └── calculatorMain

│   │       ├── Main.java

│   │       ├── someClass2.java

│   │       └── someClass1.java

│   └── resources

│       ├── Excels

│       │   └── TestExcel.xlsx

│       ├── FXMLs

│       │   └── mainWindow.fxml

│       └── log4j2.xml

我的计算器Main是:


Public class Main extends Application

{

    private static final String mainWindow = //FXML stuff

    private static final Logger logger = LogManager.getLogger(Main.class.getName());


    public static void main(String[] args)

    {

        logger.debug("Main has started");

        launch(args);

    }


    @Override

    public void start(Stage primaryStage)

    {

        try

        {

            //FXML stuff

            Parent root = //fxml stuff

            logger.info("Main scene loaded successfully");

            if (root != null)

            {

                //FXML stuff

            }

            else

                logger.error("Root was null");

        }

        catch (Exception e)

        {

            logger.error("Error",e);

        }

    }

}

我的 log4j2.xml 是


<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="warn" name="BrightnessCalculator packages">

    <!-- Logging Properties -->

    <Properties>

        <Property name="basePath">./logs</Property>

        <Property name="filePattern">${date:yyyy-MM-dd}</Property>

    </Properties>

问题是输出到控制台的根记录器设置为level="ERROR". 根据我对级别的理解,这意味着我的根记录器应该只输出错误日志或更低。然后是我的CalculatorMain Calculator.Main记录器,前者应该只记录错误和更低,而后者应该记录跟踪和更低。所以我的理解是错误日志和更低的将被打印两次,并且错误日志之上的任何内容都应该只根据父传播被打印到日志一次。但是,基于我的日志文件输出以下内容,情况并非如此:


[DEBUG] 2018-08-17 16:37:28.239 [main] calculatorMain.Main - Main has started

[DEBUG] 2018-08-17 16:37:28.239 [main] calculatorMain.Main - Main has started

[INFO ] 2018-08-17 16:37:28.741 [JavaFX Application Thread] calculatorMain.Main - Main scene loaded successfully

[INFO ] 2018-08-17 16:37:28.741 [JavaFX Application Thread] calculatorMain.Main - Main scene loaded successfully

以上这些日志应该只打印一次。我一直在关注这个经过深思熟虑的教程,但我想我一定是误解了。


jeck猫
浏览 133回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答