基于javafx项目的log4j 2日志详细配置教程

发布于:2024-05-22 ⋅ 阅读:(143) ⋅ 点赞:(0)

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();
    }
}

 4.运行结果


网站公告

今日签到

点亮在社区的每一天
去签到