Skip to content

Commit af8016a

Browse files
committed
[优化] 支持 --log-level 指定日志级别 @4ra1n
1 parent 249191f commit af8016a

File tree

6 files changed

+72
-10
lines changed

6 files changed

+72
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
更新日志:
44

55
- [功能] 支持 `--decompile` 参数反编译指定类 @4ra1n
6+
- [优化] 支持 `--log-level` 指定日志级别 @4ra1n
67

78
## 1.1.0
89

README.md

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ java -jar jar-analyzer-engine.jar --jar /path/to/app.jar --decompile com.example
114114
| `--black-list-file <file>` ||| 从文件读取黑名单 |
115115
| `--white-list-file <file>` ||| 从文件读取白名单 |
116116
| `--decompile <class>` | `-d` || 反编译指定类并输出源码到控制台(如 `com.example.MyClass`|
117+
| `--log-level <level>` || `INFO` | 日志级别:`DEBUG``INFO``WARN``ERROR` |
117118
| `--help` | `-h` || 显示帮助信息 |
118119

119120
## 📚 参数详解
@@ -211,6 +212,25 @@ java -jar jar-analyzer-engine.jar --jar springboot-app.jar --inner-jars --fix-cl
211212
java -jar jar-analyzer-engine.jar --jar app.jar --no-fix-impl
212213
```
213214

215+
### `--log-level`(日志级别)
216+
217+
设置引擎运行时的日志输出级别,默认为 `INFO`。支持以下级别(不区分大小写):
218+
219+
| 级别 | 说明 |
220+
|------|------|
221+
| `DEBUG` | 输出所有调试信息,最详细 |
222+
| `INFO` | 输出一般运行信息(默认) |
223+
| `WARN` | 仅输出警告和错误 |
224+
| `ERROR` | 仅输出错误信息 |
225+
226+
```bash
227+
# 调试模式,查看详细分析过程
228+
java -jar jar-analyzer-engine.jar --jar app.jar --log-level debug
229+
230+
# 安静模式,仅显示警告和错误
231+
java -jar jar-analyzer-engine.jar --jar app.jar --log-level warn
232+
```
233+
214234
### `--decompile` / `-d`(反编译模式)
215235

216236
指定一个类的全限定名,引擎会从 `jar-analyzer-temp` 临时目录中查找对应的 class 文件,使用内置的 FernFlower 反编译引擎将其反编译为 Java 源码,并输出到控制台。
@@ -605,8 +625,8 @@ EngineBuildRunner.run(config);
605625
```
606626
jar-analyzer-engine/
607627
├── src/main/java/me/n1ar4/jar/analyzer/
608-
│ ├── engine/ # 引擎入口层
609-
├── EngineMain.java # CLI 主入口
628+
│ ├── EngineMain.java # CLI 主入口
629+
│ ├── engine/ # 引擎核心层
610630
│ │ ├── EngineBuildRunner.java # 流水线编排核心
611631
│ │ ├── EngineConfig.java # 配置类
612632
│ │ ├── EngineBuildCmd.java # CLI 参数定义 (JCommander)

README_EN.md

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
---
2222

23-
> [中文文档](README_CN.md)
23+
> [中文文档](README.md)
2424
2525
## 📖 Introduction
2626

@@ -106,6 +106,7 @@ After analysis, a SQLite database file `jar-analyzer.db` will be generated in th
106106
| `--black-list-file <file>` || None | Read blacklist from file |
107107
| `--white-list-file <file>` || None | Read whitelist from file |
108108
| `--decompile <class>` | `-d` | None | Decompile a specific class and print source to console (e.g. `com.example.MyClass`) |
109+
| `--log-level <level>` || `INFO` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` |
109110
| `--help` | `-h` || Display help information |
110111

111112
## 📚 Argument Details
@@ -203,6 +204,25 @@ Enabling `--no-fix-impl` disables this behavior, keeping only the **literal dire
203204
java -jar jar-analyzer-engine.jar --jar app.jar --no-fix-impl
204205
```
205206

207+
### `--log-level` (Log Level)
208+
209+
Sets the log output level for the engine at runtime. Defaults to `INFO`. The following levels are supported (case-insensitive):
210+
211+
| Level | Description |
212+
|-------|-------------|
213+
| `DEBUG` | Output all debug information, most verbose |
214+
| `INFO` | Output general runtime information (default) |
215+
| `WARN` | Output only warnings and errors |
216+
| `ERROR` | Output only error messages |
217+
218+
```bash
219+
# Debug mode: see detailed analysis process
220+
java -jar jar-analyzer-engine.jar --jar app.jar --log-level debug
221+
222+
# Quiet mode: show only warnings and errors
223+
java -jar jar-analyzer-engine.jar --jar app.jar --log-level warn
224+
```
225+
206226
### `--decompile` / `-d` (Decompile Mode)
207227

208228
Specify a fully-qualified class name, and the engine will locate the corresponding class file in the `jar-analyzer-temp` directory, decompile it to Java source code using the built-in FernFlower decompiler, and output the result to the console.
@@ -600,8 +620,8 @@ EngineBuildRunner.run(config);
600620
```
601621
jar-analyzer-engine/
602622
├── src/main/java/me/n1ar4/jar/analyzer/
603-
│ ├── engine/ # Engine entry layer
604-
├── EngineMain.java # CLI main entry point
623+
│ ├── EngineMain.java # CLI main entry point
624+
│ ├── engine/ # Engine core layer
605625
│ │ ├── EngineBuildRunner.java # Pipeline orchestration core
606626
│ │ ├── EngineConfig.java # Configuration class
607627
│ │ ├── EngineBuildCmd.java # CLI argument definitions (JCommander)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<!-- Encoding -->
4040
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4141
<!-- Main -->
42-
<main.name>me.n1ar4.jar.analyzer.engine.EngineMain</main.name>
42+
<main.name>me.n1ar4.jar.analyzer.EngineMain</main.name>
4343
</properties>
4444

4545
<dependencies>

src/main/java/me/n1ar4/jar/analyzer/engine/EngineMain.java renamed to src/main/java/me/n1ar4/jar/analyzer/EngineMain.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@
88
* https://github.com/jar-analyzer/jar-analyzer/blob/master/LICENSE
99
*/
1010

11-
package me.n1ar4.jar.analyzer.engine;
11+
package me.n1ar4.jar.analyzer;
1212

1313
import com.beust.jcommander.JCommander;
1414
import me.n1ar4.jar.analyzer.decompile.DecompileEngine;
15+
import me.n1ar4.jar.analyzer.engine.EngineBuildCmd;
16+
import me.n1ar4.jar.analyzer.engine.EngineBuildRunner;
17+
import me.n1ar4.jar.analyzer.engine.EngineConfig;
18+
import me.n1ar4.jar.analyzer.engine.EngineConst;
19+
import me.n1ar4.jar.analyzer.engine.ProgressCallback;
20+
import me.n1ar4.jar.analyzer.engine.log.LogLevel;
1521
import me.n1ar4.jar.analyzer.engine.log.LogManager;
1622
import me.n1ar4.jar.analyzer.engine.log.Logger;
1723

@@ -25,9 +31,6 @@ public class EngineMain {
2531

2632
@SuppressWarnings("all")
2733
public static void main(String[] args) {
28-
logger.info("=== Jar Analyzer Engine {} ===", EngineConst.version);
29-
logger.info("Build SQLite database from JAR/WAR files");
30-
3134
EngineBuildCmd cmd = new EngineBuildCmd();
3235
JCommander jc = JCommander.newBuilder()
3336
.addObject(cmd)
@@ -48,6 +51,21 @@ public static void main(String[] args) {
4851
return;
4952
}
5053

54+
// Apply log level (default: INFO)
55+
if (cmd.logLevel != null && !cmd.logLevel.isEmpty()) {
56+
try {
57+
LogLevel level = LogLevel.valueOf(cmd.logLevel.toUpperCase());
58+
LogManager.setLevel(level);
59+
} catch (IllegalArgumentException e) {
60+
logger.error("Invalid log level: {} (valid: DEBUG, INFO, WARN, ERROR)", cmd.logLevel);
61+
System.exit(1);
62+
return;
63+
}
64+
}
65+
66+
logger.info("=== Jar Analyzer Engine {} ===", EngineConst.version);
67+
logger.info("Build SQLite database from JAR/WAR files");
68+
5169
// Decompile mode: --decompile/-d
5270
if (cmd.decompileClassName != null && !cmd.decompileClassName.isEmpty()) {
5371
// 如果指定了 --jar 且 temp 目录不存在,先执行 build 解压 class 文件

src/main/java/me/n1ar4/jar/analyzer/engine/EngineBuildCmd.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public class EngineBuildCmd {
5151
@Parameter(names = {"--decompile", "-d"}, description = "Decompile a class from JAR and print source to console (e.g. com.example.MyClass)")
5252
public String decompileClassName;
5353

54+
@Parameter(names = {"--log-level"}, description = "Log level: DEBUG, INFO, WARN, ERROR (default: INFO)")
55+
public String logLevel;
56+
5457
@Parameter(names = {"--help", "-h"}, help = true, description = "Show help message")
5558
public boolean help;
5659
}

0 commit comments

Comments
 (0)