├── main
│ ├── java
│ │ └── calculatorMain
│ │ ├── Main.java
│ │ ├── someClass2.java
│ │ └── someClass1.java
│ └── resources
│ ├── Excels
│ │ └── TestExcel.xlsx
│ ├── FXMLs
│ │ └── mainWindow.fxml
│ └── log4j2.xml
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);
}
}
}
<?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>
<Appenders>
<!-- File Appenders -->
<RollingFile name="mainLog" fileName="${basePath}/info-${filePattern}.log"
filePattern="${basePath}/app-info-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<!-- Console Appender -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="ERROR">
<AppenderRef ref="console"/>
</Root>
<Logger name="calculatorMain" level="ERROR">
<appenderRef ref="mainLog"/>
</Logger>
<Logger name="calculatorMain.Main" level="TRACE">
<appenderRef ref="mainLog"/>
</Logger>
</Loggers>
</Configuration>
[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
您遇到的问题是由于可加性默认为true
。您的教程有误导性,因为它说:
默认情况下,log4j2日志记录是附加的。这意味着当使用特定的记录器时,也将使用所有的父记录器。
事实上,这并不意味着将使用所有父记录器,而是意味着将使用所有父记录器的附加器。您应该阅读log4j2手册,特别是关于可加性的部分。
问题内容: 因此,我正在尝试学习log4j2,并把头放在记录器及其级别和父母传播上。 当前,我的源层次结构运行是: 而我的CalculatorMain是: 我的log4j2.xml是 问题是将输出到控制台的root记录程序设置为。根据我对级别的理解,这意味着我的root记录器应仅输出错误日志或更低的错误日志。然后是我的 记录器,前者应仅记录错误并降低记录,而后者应记录跟踪并降低记录。因此,我的理解
我正在使用log4j进行日志记录。我有一个场景,我必须为不同的严重性使用单独的日志记录。例如,对于软件包foo,我必须在控制台中打印具有严重性ERROR的消息,而我必须在日志文件中打印具有严重性WARN的消息。我如何配置我的log4j.xml相同。
本文向大家介绍Java记录级别,包括了Java记录级别的使用技巧和注意事项,需要的朋友参考一下 示例 Java Logging Api具有7个级别。级别降序为: SEVERE (最高值) WARNING INFO CONFIG FINE FINER FINEST (最低值) 默认级别为INFO(但这取决于系统和使用的虚拟机)。 注意:也有两个级别OFF(可用于关闭登录)和ALL(的相反OFF)。
我在一个类中创建了3个不同的slf4j记录器: 奇怪的是,即使在调试级别配置了X.Y.Z.MyClass,MyClass-a和MyClass-b记录器也不是在调试级别记录日志,而是在配置的根级别记录日志(在我的例子中是info)。如下所示,即使为-a和-b指定特定的记录器也不起作用。在我将根更改为debug之前,它们不会在debug级别进行日志记录。真的被这个难住了,有什么想法吗?
我的团队使用来控制我们的, 在中,我们可以选择更改中的级别, 我们为每个(线程)有一个单独的记录器,如果我们想只看到一个线程的控制台日志,我们关闭所有其他线程记录器,问题是每个记录器都为和某个文件发送输出,我们只想关闭stdout输出。 log4j2.xml配置示例: 我们尝试了很多解决方案: 将父记录器与可加性结合使用,并将每个附加器分离到不同的记录器,对此有什么想法吗?
org.apache.log4j.Level级别。 您还可以通过对Level类进行子类化来定义自定义级别。 水平 描述 ALL 所有级别包括自定义级别。 DEBUG 指定对调试应用程序最有用的细粒度信息事件。 INFO 指定信息性消息,以粗粒度级别突出显示应用程序的进度。 WARN 指定潜在有害的情况。 ERROR 指定可能仍允许应用程序继续运行的错误事件。 FATAL 指定非常严重的错误事件,可