因此,我正在尝试学习 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
以上这些日志应该只打印一次。我一直在关注这个经过深思熟虑的教程,但我想我一定是误解了。
相关分类