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); - } /**