这个是发给他们的测试版。

This commit is contained in:
CXT-maker 2025-08-27 17:54:47 +08:00
parent 4625d30105
commit 0c5a75a17c
12 changed files with 74 additions and 33 deletions

View File

@ -27,7 +27,7 @@ public enum System {
private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
// 默认值 // 默认值
private static final long DEFAULT_SINGLE_TIMEOUT = 30; private static final long DEFAULT_SINGLE_TIMEOUT = 30;
private static final long DEFAULT_TOTAL_TIMEOUT = 300; private static final long DEFAULT_TOTAL_TIMEOUT = 12600;
private static final boolean DEFAULT_ENABLE_STEP = false; private static final boolean DEFAULT_ENABLE_STEP = false;
public static void init() { public static void init() {

View File

@ -136,7 +136,7 @@ public class HashFileGenerator {
return; return;
} }
String hash = hashCalculator.calculatePartialHash(file); String hash = hashCalculator.calculateHash(file);
String[] result = {file.getFileName().toString(), hash}; String[] result = {file.getFileName().toString(), hash};
synchronized (results) { synchronized (results) {

View File

@ -5,6 +5,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import top.r3944realms.docchecktoolrefactored.core.LogicalAddressFileGenerator; import top.r3944realms.docchecktoolrefactored.core.LogicalAddressFileGenerator;
import top.r3944realms.docchecktoolrefactored.ui.utils.DialogUtil;
import top.r3944realms.docchecktoolrefactored.util.FileUtil; import top.r3944realms.docchecktoolrefactored.util.FileUtil;
import top.r3944realms.docchecktoolrefactored.util.LoggerMarker; import top.r3944realms.docchecktoolrefactored.util.LoggerMarker;
@ -34,11 +35,11 @@ public class ExcelFileReader implements CatalogFileReader {
Sheet sheet = workbook.getSheetAt(0); Sheet sheet = workbook.getSheetAt(0);
log.debug(LoggerMarker.DEBUG_MARKER, "读取工作表: {}", sheet.getSheetName()); log.debug(LoggerMarker.DEBUG_MARKER, "读取工作表: {}", sheet.getSheetName());
// 获取标题行 // 获取标题行
Row headerRow = sheet.getRow(0); Row headerRow = sheet.getRow(0);
if (headerRow == null) { if (headerRow == null) {
log.error(LoggerMarker.RELEASE_MARKER, "Excel文件缺少标题行"); log.error(LoggerMarker.RELEASE_MARKER, "Excel文件缺少标题行");
throw new IllegalArgumentException("Excel文件缺少标题行"); throw new IllegalArgumentException("Excel文件缺少标题行");
} }
// 查找"档号""页数"列的索引 // 查找"档号""页数"列的索引
int archiveCodeIndex = -1; int archiveCodeIndex = -1;
@ -79,7 +80,7 @@ public class ExcelFileReader implements CatalogFileReader {
) )
); );
} }
// 从第二行开始读取数据跳过标题行 // 从第二行开始读取数据跳过标题行只取数据部分内容
int totalRows = sheet.getLastRowNum(); int totalRows = sheet.getLastRowNum();
int validRecords = 0; int validRecords = 0;
int skippedRecords = 0; int skippedRecords = 0;
@ -107,9 +108,12 @@ public class ExcelFileReader implements CatalogFileReader {
// 验证数据有效性 // 验证数据有效性
if (archiveCode.isEmpty()) { if (archiveCode.isEmpty()) {
DialogUtil.showWarningDialog("警告", "操作有误", "" + ( i + 1 ) + "行档号为空,停止处理");
throw new IllegalArgumentException("" + ( i + 1 ) + "行档号为空,停止处理"); throw new IllegalArgumentException("" + ( i + 1 ) + "行档号为空,停止处理");
} }
if (page <= 0) { if (page <= 0) {
DialogUtil.showWarningDialog("警告", "操作有误", "" + ( i + 1 ) + "" + ( i + 1 ) + "行页数无效: " + page + ",停止处理");
throw new IllegalArgumentException("" + ( i + 1 ) + "行页数无效: " + page + ",停止处理"); throw new IllegalArgumentException("" + ( i + 1 ) + "行页数无效: " + page + ",停止处理");
} }

View File

@ -7,15 +7,20 @@ import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import top.r3944realms.docchecktoolrefactored.System; import top.r3944realms.docchecktoolrefactored.System;
import top.r3944realms.docchecktoolrefactored.core.Setting; import top.r3944realms.docchecktoolrefactored.core.Setting;
import top.r3944realms.docchecktoolrefactored.ui.utils.DialogUtil; import top.r3944realms.docchecktoolrefactored.ui.utils.DialogUtil;
import top.r3944realms.docchecktoolrefactored.util.LoggerMarker; import top.r3944realms.docchecktoolrefactored.util.LoggerMarker;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* The type Main stage controller. * The type Main stage controller.
*/ */
@ -153,12 +158,17 @@ public class MainStageController {
SceneManager.openSettingView(); SceneManager.openSettingView();
} }
@FXML void onOpenHelpDoc(ActionEvent actionEvent) {
DialogUtil.showDetailedInformationDialog("未实现", "敬请期待","待完善文档后内置"); @FXML
void onOpenHelpDoc(ActionEvent actionEvent) {
DialogUtil.showDetailedInformationDialog("帮助文档", "操作手册","见.exe程序同文件夹下的“操作手册。docx”文件。");
} }
@FXML void onAbout(ActionEvent actionEvent) { @FXML void onAbout(ActionEvent actionEvent) {
DialogUtil.showDetailedInformationDialog("版本", "版本信息","这里写些信息"); DialogUtil.showDetailedInformationDialog("版本", "版本信息","1.0.0-beta");
} }
public void updateStepButtonsVisibility() { public void updateStepButtonsVisibility() {
Setting setting = System.getSetting(); Setting setting = System.getSetting();

View File

@ -101,7 +101,7 @@ public class DuplicateDocumentPaneController {
result1TA.setText(task.getValue()); result1TA.setText(task.getValue());
start1B.setDisable(false); start1B.setDisable(false);
cancel1B.setDisable(true); cancel1B.setDisable(true);
log.info(LoggerMarker.RELEASE_MARKER, "查重任务完成,结果如下:{}", task.getValue()); log.info(LoggerMarker.RELEASE_MARKER, "查重任务完成.\n本次检查文件夹{}\n结果如下{}",folderPath,task.getValue());
}); });
// 处理任务失败情况 // 处理任务失败情况

View File

@ -140,7 +140,7 @@ public class PathCheckPaneController implements Initializable {
result2TA.setText("未选择保存位置"); result2TA.setText("未选择保存位置");
log.warn(LoggerMarker.DEBUG_MARKER, "用户未选择任何文件"); log.warn(LoggerMarker.DEBUG_MARKER, "用户未选择任何文件");
DialogUtil.showWarningDialog("警告", "操作有误", "未选择保存位置"); DialogUtil.showWarningDialog("警告", "操作有误", "未选择保存位置");
generateLogicalAddress2B.setDisable(true); generateLogicalAddress2B.setDisable(false);
return; return;
} }
System.setLastModifiedFile(outputFile); System.setLastModifiedFile(outputFile);
@ -159,6 +159,8 @@ public class PathCheckPaneController implements Initializable {
// 创建后台任务 // 创建后台任务
AddressFileGenerationTask task = new AddressFileGenerationTask(filePath, outputFile, selectedMode.number, true); AddressFileGenerationTask task = new AddressFileGenerationTask(filePath, outputFile, selectedMode.number, true);
// 保存到字段
currentTask = task;
// 绑定任务属性到UI // 绑定任务属性到UI
ChangeListener<Number> progressChangeListener = (obs, oldVal, newVal) -> { ChangeListener<Number> progressChangeListener = (obs, oldVal, newVal) -> {
if (newVal != null) { if (newVal != null) {
@ -361,9 +363,17 @@ public class PathCheckPaneController implements Initializable {
task.setOnSucceeded(event -> { task.setOnSucceeded(event -> {
cancelableProgressBar.closeProgress(); cancelableProgressBar.closeProgress();
start2B.setDisable(false); start2B.setDisable(false);
result2TA.setText(AddressFileComparator.ComparisonResult.generateComparisonResults(task.getValue(), loadFolderType2CB.getValue().compareMode)); // 获取格式化后的结果文本
result2TA.setText(AddressFileComparator.ComparisonResult.generateComparisonResults(task.getValue(), loadFolderType2CB.getValue().compareMode)); String resultText = AddressFileComparator.ComparisonResult.generateComparisonResults(
task.getValue(),
loadFolderType2CB.getValue().compareMode
);
// 设置结果到文本区域
result2TA.setText(resultText);
//内部比较器已有此处忽略日志打印 //内部比较器已有此处忽略日志打印
// 记录格式化后的结果到日志
log.info(LoggerMarker.RELEASE_MARKER, "文件查漏、存储路径和命名规范结果如下:\n{}", resultText);
}); });
task.setOnFailed(event -> { task.setOnFailed(event -> {

View File

@ -142,6 +142,7 @@ public class StorageCarrierPaneController {
result7TA.setText("计算结果:\n" + hashResult); result7TA.setText("计算结果:\n" + hashResult);
generateHashFile7B.setDisable(false); generateHashFile7B.setDisable(false);
log.info(LoggerMarker.DEBUG_MARKER, "文件哈希值计算完成: {}", hashResult); log.info(LoggerMarker.DEBUG_MARKER, "文件哈希值计算完成: {}", hashResult);
log.info(LoggerMarker.RELEASE_MARKER, "文件哈希值计算完成.\t{}文件的哈希值: {}", filePath,hashResult);
} catch (IOException e) { } catch (IOException e) {
log.error(LoggerMarker.DEBUG_MARKER, "计算文件哈希值时出错: {}", filePath, e); log.error(LoggerMarker.DEBUG_MARKER, "计算文件哈希值时出错: {}", filePath, e);
DialogUtil.showDetailedErrorDialog("错误", "生成哈希文件时出错:", e.getMessage()); DialogUtil.showDetailedErrorDialog("错误", "生成哈希文件时出错:", e.getMessage());
@ -230,6 +231,7 @@ public class StorageCarrierPaneController {
log.info(LoggerMarker.DEBUG_MARKER, "哈希文件生成任务成功完成"); log.info(LoggerMarker.DEBUG_MARKER, "哈希文件生成任务成功完成");
caculateHash7B.setDisable(false); caculateHash7B.setDisable(false);
result7TA.setText(task.getValue()); result7TA.setText(task.getValue());
log.info(LoggerMarker.RELEASE_MARKER, task.getValue());
}); });
// 任务失败处理 // 任务失败处理

View File

@ -41,7 +41,7 @@ public class HashFileGenerationTask extends Task<String> {
generator.setCallback((current, total) -> { generator.setCallback((current, total) -> {
updateProgress(current, total); updateProgress(current, total);
updateMessage("处理文件: " + current + "/" + total); updateMessage("处理文件: " + current + "/" + total);
if (current % 500 == 0 || current == total) { if (current % 5000 == 0 || current == total) {
log.info(LoggerMarker.DEBUG_MARKER, "处理进度: {}/{}", current, total); log.info(LoggerMarker.DEBUG_MARKER, "处理进度: {}/{}", current, total);
} }
}); });

View File

@ -50,6 +50,9 @@
<GridPane.margin> <GridPane.margin>
<Insets bottom="2.0" left="10.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="10.0" right="2.0" top="2.0" />
</GridPane.margin> </GridPane.margin>
<font>
<Font size="16.0" />
</font>
</Button> </Button>
<Label text="结果反馈:" GridPane.rowIndex="2"> <Label text="结果反馈:" GridPane.rowIndex="2">
<GridPane.margin> <GridPane.margin>
@ -71,10 +74,13 @@
<Insets left="10.0" /> <Insets left="10.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Button fx:id="cancel1B" alignment="CENTER" mnemonicParsing="false" onAction="#onCancel" prefHeight="52.0" prefWidth="117.0" text="取消检查" GridPane.columnIndex="3" GridPane.rowIndex="1"> <Button fx:id="cancel1B" alignment="CENTER" mnemonicParsing="false" onAction="#onCancel" prefHeight="58.0" text="取消检查" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</Button> </Button>
</children> </children>
<padding> <padding>

View File

@ -67,7 +67,7 @@
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
<font> <font>
<Font size="14.0" /> <Font size="16.0" />
</font> </font>
</Button> </Button>
<TextField fx:id="loadCatalog2TF" GridPane.columnIndex="2"> <TextField fx:id="loadCatalog2TF" GridPane.columnIndex="2">

View File

@ -17,10 +17,12 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="345.3333435058594" minWidth="10.0" percentWidth="25.0" prefWidth="227.00004069010413" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="345.3333435058594" minWidth="10.0" percentWidth="25.0" prefWidth="227.00004069010413" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="500.0" minWidth="10.0" percentWidth="25.0" prefWidth="400.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="500.0" minWidth="10.0" percentWidth="25.0" prefWidth="400.0" />
<ColumnConstraints /> <ColumnConstraints />
<ColumnConstraints />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="151.33334350585938" percentHeight="7.0" prefHeight="55.00001017252603" vgrow="NEVER" /> <RowConstraints maxHeight="151.33334350585938" minHeight="64.33332824707031" percentHeight="7.0" prefHeight="119.0" vgrow="NEVER" />
<RowConstraints maxHeight="508.33333333333326" percentHeight="7.0" prefHeight="73.99999491373697" vgrow="NEVER" /> <RowConstraints maxHeight="508.33333333333326" minHeight="10.0" percentHeight="5.0" prefHeight="47.333335876464844" vgrow="NEVER" />
<RowConstraints maxHeight="508.33333333333326" minHeight="0.0" percentHeight="7.0" prefHeight="81.66666412353516" vgrow="NEVER" />
<RowConstraints maxHeight="592.6666666666666" percentHeight="7.0" prefHeight="581.3333536783855" vgrow="NEVER" /> <RowConstraints maxHeight="592.6666666666666" percentHeight="7.0" prefHeight="581.3333536783855" vgrow="NEVER" />
<RowConstraints maxHeight="1.7976931348623157E308" prefHeight="581.3333536783855" vgrow="SOMETIMES" /> <RowConstraints maxHeight="1.7976931348623157E308" prefHeight="581.3333536783855" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
@ -33,7 +35,7 @@
<Insets left="5.0" /> <Insets left="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="将档案目录、哈希值列表文件和检测过程文件打包制成打包制成“数字化验收检测包.rar”压缩包" GridPane.columnSpan="5" GridPane.halignment="CENTER" GridPane.rowSpan="2" GridPane.valignment="CENTER"> <Label text="将档案目录、哈希值列表文件和检测过程文件打包制成打包制成“数字化验收检测包.rar”压缩包" GridPane.columnSpan="4" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER">
<padding> <padding>
<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
</padding> </padding>
@ -41,7 +43,7 @@
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
</Label> </Label>
<Label text="结果反馈:" GridPane.rowIndex="2"> <Label text="结果反馈:" GridPane.rowIndex="3">
<padding> <padding>
<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
</padding> </padding>
@ -49,7 +51,7 @@
<Insets left="5.0" /> <Insets left="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="载入压缩包:" GridPane.rowIndex="1"> <Label text="载入压缩包:" GridPane.rowIndex="2">
<padding> <padding>
<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
</padding> </padding>
@ -65,7 +67,7 @@
<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
</padding> </padding>
</TextField> </TextField>
<TextField fx:id="loadCompressedFile" GridPane.columnIndex="1" GridPane.rowIndex="1"> <TextField fx:id="loadCompressedFile" GridPane.columnIndex="1" GridPane.rowIndex="2">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
@ -73,7 +75,7 @@
<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
</padding> </padding>
</TextField> </TextField>
<TextArea fx:id="result7TA" editable="false" prefWidth="400.0" GridPane.columnSpan="3" GridPane.rowIndex="3"> <TextArea fx:id="result7TA" editable="false" prefWidth="400.0" GridPane.columnSpan="3" GridPane.rowIndex="4">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
@ -103,7 +105,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Button> </Button>
<Button fx:id="selectLoadCompressedFile7B" mnemonicParsing="false" onAction="#onSelectLC" text="选择文件" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER"> <Button fx:id="selectLoadCompressedFile7B" mnemonicParsing="false" onAction="#onSelectLC" text="选择文件" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
@ -114,7 +116,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Button> </Button>
<Button fx:id="caculateHash7B" mnemonicParsing="false" onAction="#onCaculateHash" text="计算哈希值" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER"> <Button fx:id="caculateHash7B" mnemonicParsing="false" onAction="#onCaculateHash" text="计算哈希值" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
@ -125,7 +127,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Button> </Button>
<TextArea editable="false" maxWidth="1.7976931348623157E308" prefWidth="400.0" text="1.对照《存储载体检查登记表》附件7检查并记录存储载体的类型/数量/内容/可读性情况。&#10;2.计算数字化成果(包括单页、多页文件)的MD5码生成列表文件保存在目录所在文件夹&#10;3.将列表文件、目录文件、检测过程文件第2步生成的逻辑地址、物理地址等csv文件打包生成&quot;数字化验收检测包.rar&quot;&#10;4.计算并验证压缩包的MD5码或哈希值&#10;5.结果填入《存储载体检查登记表》附件7" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="3"> <TextArea editable="false" maxWidth="1.7976931348623157E308" prefWidth="400.0" text="1.对照《存储载体检查登记表》附件7检查并记录存储载体的类型/数量/内容/可读性情况。&#10;2.计算数字化成果(包括单页、多页文件)的MD5码生成列表文件保存在目录所在文件夹&#10;3.将列表文件、目录文件、检测过程文件第2步生成的逻辑地址、物理地址等csv文件打包生成&quot;数字化验收检测包.rar&quot;&#10;4.计算并验证压缩包的MD5码或哈希值&#10;5.结果填入《存储载体检查登记表》附件7" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="4">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</GridPane.margin> </GridPane.margin>
@ -136,7 +138,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</TextArea> </TextArea>
<Label text="工作内容:" GridPane.columnIndex="3" GridPane.rowIndex="2"> <Label text="工作内容:" GridPane.columnIndex="3" GridPane.rowIndex="3">
<GridPane.margin> <GridPane.margin>
<Insets left="10.0" /> <Insets left="10.0" />
</GridPane.margin> </GridPane.margin>

View File

@ -3,7 +3,7 @@
<!-- 属性定义保持不变 --> <!-- 属性定义保持不变 -->
<property name="APP_NAME" value="DocCheckTool"/> <property name="APP_NAME" value="DocCheckTool"/>
<property name="LOG_HOME" value="${APP_NAME}/${log.dir:-logs}"/> <property name="LOG_HOME" value="${log.dir:-logs}"/>
<property name="RELEASE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%level] %msg%n"/> <property name="RELEASE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%level] %msg%n"/>
<property name="DEBUG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/> <property name="DEBUG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
<property name="TRACKER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/> <property name="TRACKER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
@ -12,7 +12,7 @@
<!-- 控制台输出 --> <!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder charset="UTF-8" >
<pattern>${DEBUG_PATTERN}</pattern> <pattern>${DEBUG_PATTERN}</pattern>
</encoder> </encoder>
</appender> </appender>
@ -31,7 +31,7 @@
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
<encoder> <encoder charset="UTF-8">
<pattern>${RELEASE_PATTERN}</pattern> <pattern>${RELEASE_PATTERN}</pattern>
</encoder> </encoder>
</appender> </appender>
@ -50,7 +50,7 @@
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
<encoder> <encoder charset="UTF-8">
<pattern>${DEBUG_PATTERN}</pattern> <pattern>${DEBUG_PATTERN}</pattern>
</encoder> </encoder>
</appender> </appender>
@ -69,7 +69,7 @@
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
<encoder> <encoder charset="UTF-8">
<pattern>${TRACKER_PATTERN}</pattern> <pattern>${TRACKER_PATTERN}</pattern>
</encoder> </encoder>
</appender> </appender>
@ -89,6 +89,13 @@
<appender-ref ref="TRACKER_FILE"/> <appender-ref ref="TRACKER_FILE"/>
<appender-ref ref="STDOUT"/> <appender-ref ref="STDOUT"/>
</logger> </logger>
<!-- 添加你刚刚添加的logger -->
<logger name="top.r3944realms.docchecktoolrefactored" level="DEBUG" additivity="false">
<appender-ref ref="RELEASE_FILE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="TRACKER_FILE"/>
<appender-ref ref="STDOUT"/>
</logger>
<!-- ROOT Logger - 输出到控制台 --> <!-- ROOT Logger - 输出到控制台 -->
<root level="INFO"> <root level="INFO">