34 lines
1.1 KiB
Markdown
34 lines
1.1 KiB
Markdown
Experiment with java22 and Rust to monitor exceptions in a JVM
|
|
|
|
* It's a mini APM that leverages the java22 ClassFile API and java22 Foreign Function Interface.
|
|
* It's a java agent that instruments all `throw` opcodes in your bytecode with a call to a logger written in Rust.
|
|
|
|
Work in Progress. Proof of concept works, but needs optimization. Try this at home, not at work :)
|
|
|
|
Running:
|
|
* Update the path to the rust lib (temp fix) in ExceptionLogger for your setup
|
|
* mvn clean install `#maven also takes care of cargo`
|
|
* create a minimal class in a separate project
|
|
```java
|
|
public class Main {
|
|
public static void main(String[] args) throws Throwable {
|
|
throw new Throwable();
|
|
}
|
|
}
|
|
```
|
|
Requirements
|
|
* java22
|
|
* rust
|
|
|
|
Start rest service
|
|
``` bash
|
|
cd api; RUST_LOG=info cargo run
|
|
```
|
|
|
|
Start your java with
|
|
```
|
|
java22 -javaagent:$EXCEPTIONAL_PROJECT/exceptional/agent/target/exceptional-agent-1.0-SNAPSHOT.jar
|
|
-Dagentlib="$EXCEPTIONAL_PROJECT/rustlib/target/debug/librustlib.dylib"
|
|
--enable-preview --enable-native-access=ALL-UNNAMED
|
|
-classpath $YOUR_CLASSPATH YourMain
|
|
```
|