1.添加pom依赖
<properties> <log4j.version>2.17.1</log4j.version> </properties><dependencies> <!--log4j2 start--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <!--log4j2 end--> </dependencies>
2.log4j2.xml文件
该文件需要放在resource目录下
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="300"> <!-- debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/"-->
<properties>
<property name="LOG_HOME">F:\tbyf\javafxProjectCreateByMaven\logs</property>
<property name="FILE_NAME">sign-info</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36}:%M(%L)] - %msg%xEx%n"/>
</Console>
<RollingRandomAccessFile name="MyFile"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
<!-- filePattern="${LOG_HOME}/$${date:yyyy}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">-->
<PatternLayout
pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36}:%M(%L)] - %msg%xEx%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/> <!--每1小时/分/... 生成一个文件, 时间依据filePattern的配置-->
<SizeBasedTriggeringPolicy size="5 MB"/>
</Policies>
<DefaultRolloverStrategy max="30">
<!-- 如果要使用date,这里的date要和filePattern匹配不然找不到删除不掉
maxDepth匹配删除的层级logs为1,是logs下面的第几个子级就加几 例如:logs/2024 =》maxDepth="2" -->
<!-- ${LOG_HOME} 自定义引用, $${date:yyyy}时间日期引用 date格式:yyyy-MM-->
<Delete basePath="${LOG_HOME}/" maxDepth="1">
<!-- <Delete basePath="${LOG_HOME}/$${date:yyyy}/" maxDepth="2">-->
<IfFileName glob="*.log" />
<!--!Note: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
<!--30天-->
<IfLastModified age="720H" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<Logger name="mylog" level="debug" additivity="false">
<AppenderRef ref="MyFile"/>
<AppenderRef ref="Console"/>
</Logger>
<Root level="debug">
<AppenderRef ref="MyFile"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
3.Main.java使用示例
package com.tbyf.wis.main;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
//import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @author TTc
* @version 1.0
* @date 2024/5/15 14:06
*/
public class Main extends Application {
private static Logger logger = LogManager.getLogger("Main");
@Override
public void start(Stage primaryStage) throws Exception {
Button button2 = new Button("点击按钮2!");
button2.setLayoutX(20);
button2.setLayoutY(50);
button2.setOnAction(e ->{
Label label = new Label("被点击后的新窗口!");
BorderPane borderPane = new BorderPane(label);
Scene scene = new Scene(borderPane);
Stage stage = new Stage();
stage.setScene(scene);
stage.setWidth(400);
stage.setHeight(200);
// 新窗口打开时可操作其他窗口
// stage.initModality(Modality.NONE);
// 新窗口打开时不可操作其他窗口
stage.show();
// 窗口关闭点击触发
stage.setOnCloseRequest(event->{
logger.error("内窗口关闭错误提示~");
logger.info("内窗窗口关闭按钮被点击了~");
});
});
// 节点node
Button button = new Button("点击按钮!");
// 按钮的位置
button.setLayoutX(300);
button.setLayoutY(300);
button.setOnAction(e ->{
Label label = new Label("被点击后的新窗口!~~~~~");
BorderPane borderPane = new BorderPane(label);
Scene scene = new Scene(borderPane);
Stage stage = new Stage();
stage.setScene(scene);
// 被点击后弹出窗口的大小
stage.setWidth(200);
stage.setHeight(200);
// 新窗口打开时可操作其他窗口
// stage.initModality(Modality.NONE);
// 新窗口打开时不可操作其他窗口,下面两条结合使用
stage.initOwner(primaryStage);
stage.initModality(Modality.WINDOW_MODAL);
stage.show();
});
AnchorPane anchorPane = new AnchorPane();
anchorPane.getChildren().add(button);
anchorPane.getChildren().add(button2);
// 场景scene
Scene scene = new Scene(anchorPane);
// 窗口stage
primaryStage.setTitle("案列测试");
primaryStage.setScene(scene);
// 是否可变大小
primaryStage.setResizable(true);
// 自定义窗口图标
primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/fxml/image/ico.png")));
primaryStage.setX(600);
primaryStage.setY(80);
primaryStage.setWidth(600);
primaryStage.setHeight(600);
// primaryStage.initStyle(StageStyle.UNDECORATED);
// 窗口边侧栏修饰,有最小化,最大化,关闭按钮
primaryStage.initStyle(StageStyle.DECORATED);
// 窗口关闭点击触发
primaryStage.setOnCloseRequest(event->{
logger.info("外层窗口关闭按钮被点击了~");
});
primaryStage.show();
}
public static void main(String[] args) {
launch();
}
}