From 79e368dc17da8914f09649c4fe1fd2bcbecc3485 Mon Sep 17 00:00:00 2001
From: gewuyou <1063891901@qq.com>
Date: Mon, 21 Aug 2023 18:29:29 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20=E6=B7=BB=E5=8A=A0=E4=BE=9D?=
=?UTF-8?q?=E8=B5=96=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=B9=B6=E5=BC=95=E5=85=A5?=
=?UTF-8?q?Slf4j=20api=20=E4=B8=8E=20logback=E4=BD=9C=E4=B8=BA=E9=A1=B9?=
=?UTF-8?q?=E7=9B=AE=E6=97=A5=E5=BF=97=E6=A1=86=E6=9E=B6=EF=BC=8C=E5=B7=B2?=
=?UTF-8?q?=E6=9B=BF=E6=8D=A2=E9=A1=B9=E7=9B=AE=E5=86=85=E6=8E=A7=E5=88=B6?=
=?UTF-8?q?=E5=8F=B0=E8=BE=93=E5=87=BA=EF=BC=8C=E7=AE=80=E5=8D=95=E5=B0=81?=
=?UTF-8?q?=E8=A3=85=E4=BA=86=E6=97=A5=E5=BF=97=E5=B7=A5=E5=85=B7=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 13 ++-
src/main/java/module-info.java | 2 +
.../controller/event/handler/SaveAsFile.java | 3 +-
.../controller/manager/Controller.java | 7 +-
.../controller/manager/ShortcutKey.java | 5 +-
.../jcnc/jnotepad/exception/AppException.java | 14 ++++
.../jcnc/jnotepad/tool/EncodingDetector.java | 2 +-
.../java/org/jcnc/jnotepad/tool/FileUtil.java | 2 +-
.../java/org/jcnc/jnotepad/tool/LogUtil.java | 79 +++++++++++++++++++
.../jnotepad/view/manager/ViewManager.java | 6 +-
10 files changed, 120 insertions(+), 13 deletions(-)
create mode 100644 src/main/java/org/jcnc/jnotepad/exception/AppException.java
create mode 100644 src/main/java/org/jcnc/jnotepad/tool/LogUtil.java
diff --git a/pom.xml b/pom.xml
index e6fde4c..c57ff05 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,18 @@
gson
2.10.1
-
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.32
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.9
+
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index c4adc8c..3aa0d42 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -4,6 +4,7 @@ module org.jcnc.jnotepad {
// requires cn.hutool.json;
// requires cn.hutool.core;
requires com.google.gson;
+ requires org.slf4j;
exports org.jcnc.jnotepad;
exports org.jcnc.jnotepad.tool;
exports org.jcnc.jnotepad.Interface;
@@ -13,4 +14,5 @@ module org.jcnc.jnotepad {
exports org.jcnc.jnotepad.view.manager;
exports org.jcnc.jnotepad.constants;
exports org.jcnc.jnotepad.ui;
+ exports org.jcnc.jnotepad.exception;
}
\ No newline at end of file
diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java
index c5afe8d..b2c1536 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java
@@ -4,6 +4,7 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Tab;
import javafx.stage.FileChooser;
+import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.view.manager.ViewManager;
@@ -49,7 +50,7 @@ public class SaveAsFile implements EventHandler {
selectedTab.setText(file.getName()); // 更新Tab页标签上的文件名
selectedTab.setUserData(file); // 将文件对象保存到Tab页的UserData中
} catch (IOException ignored) {
- System.out.println("已忽视IO异常!");
+ LogUtil.info("已忽略IO异常!",this.getClass());
}
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java
index 1f622df..a7b1417 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java
@@ -11,6 +11,7 @@ import org.jcnc.jnotepad.controller.event.handler.NewFile;
import org.jcnc.jnotepad.controller.event.handler.OpenFile;
import org.jcnc.jnotepad.controller.event.handler.SaveAsFile;
import org.jcnc.jnotepad.tool.EncodingDetector;
+import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.view.manager.ViewManager;
@@ -107,9 +108,9 @@ public class Controller implements ControllerInterface {
if (file != null) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.write(newValue);
- System.out.println("正在自动保存---");
+ LogUtil.info("正在自动保存---",this.getClass());
} catch (IOException ignored) {
- System.out.println("已忽视IO异常!");
+ LogUtil.info("已忽略IO异常!",this.getClass());
}
}
}
@@ -184,7 +185,7 @@ public class Controller implements ControllerInterface {
autoSave(textArea);
});
} catch (IOException ignored) {
- System.out.println("已忽视IO异常!");
+ LogUtil.info("已忽略IO异常!",this.getClass());
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/ShortcutKey.java b/src/main/java/org/jcnc/jnotepad/controller/manager/ShortcutKey.java
index 1cd4d74..3228404 100644
--- a/src/main/java/org/jcnc/jnotepad/controller/manager/ShortcutKey.java
+++ b/src/main/java/org/jcnc/jnotepad/controller/manager/ShortcutKey.java
@@ -6,6 +6,7 @@ import com.google.gson.reflect.TypeToken;
import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;
import org.jcnc.jnotepad.Interface.ShortcutKeyInterface;
+import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.view.manager.ViewManager;
import java.io.*;
@@ -33,7 +34,7 @@ public class ShortcutKey implements ShortcutKeyInterface {
jsonData.append(line);
}
} catch (IOException e) {
- e.printStackTrace();
+ LogUtil.error(e.getMessage(),e,this.getClass());
}
} else {
// todo new InputStreamReader(inputStream) 实参 'inputStream' 可能为null
@@ -43,7 +44,7 @@ public class ShortcutKey implements ShortcutKeyInterface {
jsonData.append(line);
}
} catch (IOException e) {
- e.printStackTrace();
+ LogUtil.error(e.getMessage(),e,this.getClass());
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/exception/AppException.java b/src/main/java/org/jcnc/jnotepad/exception/AppException.java
new file mode 100644
index 0000000..af59783
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/exception/AppException.java
@@ -0,0 +1,14 @@
+package org.jcnc.jnotepad.exception;
+import org.jcnc.jnotepad.tool.LogUtil;
+
+/**
+ * 应用异常类
+ *
+ * @author gewuyou
+ */
+public class AppException extends RuntimeException{
+ public AppException(String message) {
+ super(message);
+ LogUtil.error(message,this.getClass());
+ }
+}
diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java
index 5343276..938af8a 100644
--- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java
+++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java
@@ -36,7 +36,7 @@ public class EncodingDetector {
// 尝试常见的编码
for (Charset charset : commonCharsets()) {
if (isValidEncoding(text, charset)) {
- System.out.println("编码监测结果:" + isValidEncoding(text, charset));
+ LogUtil.info("编码监测结果:" + isValidEncoding(text, charset), EncodingDetector.class);
return charset.name();
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/tool/FileUtil.java b/src/main/java/org/jcnc/jnotepad/tool/FileUtil.java
index 86dfde1..9156a90 100644
--- a/src/main/java/org/jcnc/jnotepad/tool/FileUtil.java
+++ b/src/main/java/org/jcnc/jnotepad/tool/FileUtil.java
@@ -30,7 +30,7 @@ public class FileUtil {
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
- e.printStackTrace();
+ LogUtil.error(e.getMessage(),e,FileUtil.class);
return null;
}
}
diff --git a/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java b/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java
new file mode 100644
index 0000000..1639855
--- /dev/null
+++ b/src/main/java/org/jcnc/jnotepad/tool/LogUtil.java
@@ -0,0 +1,79 @@
+package org.jcnc.jnotepad.tool;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 日志工具类
+ *
+ * @author gewuyou
+ */
+public class LogUtil {
+ private LogUtil() {
+ }
+
+ /**
+ * 日志信息打印
+ *
+ * @param message 日志信息
+ * @param currentClass 所要记录的类
+ *
+ * @apiNote 传入当前需要记录的类,方便知晓是哪个位置记录的日志
+ */
+ public static void info(String message, Class> currentClass) {
+ Logger logger = LoggerFactory.getLogger(currentClass);
+ logger.info(message);
+ }
+ /**
+ * 日志排错信息打印
+ *
+ * @param message 日志信息
+ * @param currentClass 所要记录的类
+ *
+ * @apiNote 传入当前需要记录的类,方便知晓是哪个位置记录的日志
+ */
+
+ public static void debug(String message, Class> currentClass) {
+ Logger logger = LoggerFactory.getLogger(currentClass);
+ logger.debug(message);
+ }
+ /**
+ * 日志警告信息打印
+ *
+ * @param message 日志信息
+ * @param currentClass 所要记录的类
+ *
+ * @apiNote 传入当前需要记录的类,方便知晓是哪个位置记录的日志
+ */
+ public static void warn(String message, Class> currentClass) {
+ Logger logger = LoggerFactory.getLogger(currentClass);
+ logger.warn(message);
+ }
+ /**
+ * 日志错误信息打印
+ *
+ * @param message 日志信息
+ * @param currentClass 所要记录的类
+ *
+ * @apiNote 传入当前需要记录的类,方便知晓是哪个位置记录的日志
+ */
+ public static void error(String message, Class> currentClass) {
+ Logger logger = LoggerFactory.getLogger(currentClass);
+ logger.error(message);
+ }
+ /**
+ * 日志错误信息打印
+ *
+ * @param message 日志信息
+ * @param throwable 抛出的异常
+ * @param currentClass 所要记录的类
+ *
+ * @apiNote 这个方法用来弥补当抛出异常或手动抛出异常时,无法捕捉到所抛异常
+ */
+
+ public static void error(String message, Throwable throwable, Class> currentClass) {
+ Logger logger = LoggerFactory.getLogger(currentClass);
+ logger.error(message, throwable);
+ }
+}
+
diff --git a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java
index bac2c4c..0842809 100644
--- a/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java
+++ b/src/main/java/org/jcnc/jnotepad/view/manager/ViewManager.java
@@ -5,6 +5,7 @@ import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
+import org.jcnc.jnotepad.exception.AppException;
import java.util.HashMap;
import java.util.Map;
@@ -25,9 +26,7 @@ public class ViewManager {
private int tabIndex = 0;
private Boolean line = true;
-
/// 菜单栏组件
-
/**
* 菜单栏
*/
@@ -177,7 +176,7 @@ public class ViewManager {
if (instance != null) {
return instance;
} else {
- throw new RuntimeException("ViewManager的实例未初始化!");
+ throw new AppException("ViewManager实例未初始化!");
}
}
@@ -189,7 +188,6 @@ public class ViewManager {
private ViewManager(Scene scene) {
root = new BorderPane();
scene.setRoot(root);
-
}
/**