日志系统
SCE-Universe Java Edition 项目中的日志系统采用简单直接的方式,主要通过 Java 标准输出流 (System.out.println) 和标准错误流 (System.err.println) 以及异常堆栈跟踪 (e.printStackTrace()) 来记录应用程序的运行时信息、调试消息和错误。
概述
该项目的日志记录机制没有使用外部日志框架(如 Logback 或 Log4j),而是依赖于 Java 内置的控制台输出功能。这种方法适用于小型项目或调试阶段,能快速地将信息和错误直接输出到运行应用程序的控制台。主要用途包括:
- 调试信息:输出变量状态、执行路径等,帮助开发者理解程序行为。
- 错误报告:捕获异常时打印堆栈跟踪,提供错误发生的详细上下文。
- 状态通知:在关键操作(如模块加载、配置读取)时提供简要的进度或成功消息。
架构
日志系统架构非常基础,它直接将日志消息从应用程序的各个组件路由到 Java 虚拟机管理的标准输出和标准错误流。
架构说明
如上图所示,不同的应用程序组件根据消息类型和重要性,将日志输出到 System.out 或 System.err。所有这些输出最终都会定向到运行 Java 程序的控制台或终端。
System.out:主要用于输出常规信息、UI 消息或调试数据。System.err:主要用于输出错误信息、警告以及异常堆栈跟踪。
这种直接的输出方式不提供日志级别过滤、格式化配置或文件写入等高级功能。
核心日志流
核心日志流非常简单,即消息从代码中直接写入到标准输出或标准错误。
流说明
- 当应用程序中的任何组件需要记录信息时,它会直接调用
System.out.println()或System.err.println()。 - 在捕获到异常时,通常会调用异常对象的
printStackTrace()方法,这会将完整的异常堆栈跟踪输出到System.err。 System.out和System.err的输出最终都会显示在程序运行的控制台界面上。
使用示例
项目中广泛使用了 System.err.println 用于错误和警告信息,System.out.println 用于普通信息,以及 e.printStackTrace() 处理异常。
错误信息输出
在 App.java 的启动逻辑中,当路由启动时会输出一条错误信息:
System.err.println("[Main] 准备启动路由...");在 modlist.java 中,模块加载器也会输出扫描目录和插件信息:
System.err.println("[ModLoader] 正在扫描目录: " + mod_folder.getAbsolutePath());
// ...
System.err.println("[ModLoader] Mod信息 "+info.name()+" "+info.author()+" "+info.version());异常堆栈跟踪
当代码块中发生异常时,通常会使用 e.printStackTrace() 来打印详细的错误信息,例如在 App.java 初始化页面时:
} catch(Exception e){
e.printStackTrace();
}普通信息输出
在 UI_core.java 中,System.out.println 被用于在用户界面中打印普通文本和换行:
1fmt.print(fmt.fg(color),"{}",textContent);
2if(isNewLine){
3 System.out.println();
4}配置选项
该日志系统没有提供外部配置选项。日志行为由硬编码在源代码中的 System.out.println、System.err.println 和 e.printStackTrace() 调用决定。
API 参考
该日志系统没有对外暴露特定的 API 接口,其功能通过直接调用 Java 标准库中的以下方法实现:
System.out.println(String x)
在标准输出流中打印字符串,并终止当前行。
Parameters:
x(String): 要打印的字符串。
Returns: 无。
Throws: 无。
System.err.println(String x)
在标准错误流中打印字符串,并终止当前行。
Parameters:
x(String): 要打印的字符串。
Returns: 无。
Throws: 无。
Throwable.printStackTrace()
将此 Throwable 及其回溯信息打印到标准错误流。
Parameters: 无。
Returns: 无。
Throws: 无。