Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tanersener/smart-exception
Utilities to handle throwable objects and format stack trace elements in JVM based languages (Java, Scala, Kotlin, Groovy, etc.)
https://github.com/tanersener/smart-exception
android exception-handling groovy java kotlin scala
Last synced: 15 days ago
JSON representation
Utilities to handle throwable objects and format stack trace elements in JVM based languages (Java, Scala, Kotlin, Groovy, etc.)
- Host: GitHub
- URL: https://github.com/tanersener/smart-exception
- Owner: tanersener
- License: bsd-3-clause
- Created: 2019-11-24T16:37:39.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2022-05-30T22:11:42.000Z (over 2 years ago)
- Last Synced: 2024-07-24T11:30:50.388Z (4 months ago)
- Topics: android, exception-handling, groovy, java, kotlin, scala
- Language: Java
- Homepage:
- Size: 223 KB
- Stars: 27
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SmartException ![GitHub release](https://img.shields.io/badge/release-v0.2.1-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/smart-exception-java) ![build status](https://github.com/tanersener/smart-exception/actions/workflows/build.yml/badge.svg)
Utilities to handle throwable objects and format stack trace elements in `JVM` based languages (`Java`, `Scala`, `Kotlin`, `Groovy`, etc.)
### 1. Features
- Build shorter stack traces
- Start exception chain from a root package
- Group stack trace elements from the same package
- Ignore stack trace elements
- Ignore causes
- Define how many stack trace elements will be printed
- Use `SmartExceptionConverter` in `logback` to generate shorter stack traces without a code change
- Create conversion rules to use within pattern layout
- Define a `throwableConverter` to format stack traces in `logstash-logback-encoder`
- Do not include module name while printing a stack trace element
- Do not print suppressed exceptions
- Customise how a stack trace element will be printed
- Define how native methods and closed source stack trace elements will be printed
- Search for a cause in an exception chain
- Get the cause of a throwable
- Print package information (jar file and version)### 2. Using
Binaries are available at [Github](https://github.com/tanersener/smart-exception/releases)
and [Maven Central](https://repo1.maven.org/maven2).#### 2.1. Java API
Use `Java API` to access all features of the library. See
[Java API](https://github.com/tanersener/smart-exception/wiki/Java-API) wiki page for the complete list of API methods.Install `smart-exception` by adding one of the following dependencies to your `build.gradle`.
- Java 9 or later
```
dependencies {
implementation 'com.arthenica:smart-exception-java9:0.2.1'
}
```- Java 7/8 or Android
```
dependencies {
implementation 'com.arthenica:smart-exception-java:0.2.1'
}
```##### 2.1.1 Import Exceptions class
Import `Exceptions` class, which contains all utility methods, from the correct package.
- Java 9 or later
```
import com.arthenica.smartexception.java9.Exceptions;
```- Java 7/8 or Android
```
import com.arthenica.smartexception.java.Exceptions;
```##### 2.1.2 Create shorter stack traces
Use `getStackTraceString` method to create a shorter stack trace. By default, `getStackTraceString` will generate the
same long stack trace as a string for you. You need to define some rules for `getStackTraceString` to use. Those rules
define how the exception stack trace is processed and shortened.```
Exceptions.getStackTraceString(e);
```##### 2.1.3 Use `root` packages.
`root` package is the entry point in an exception chain. If you define a `root` package, then all stack trace elements
before that `root` package will be discarded, and you will get a cleaner, compact stack trace. A `root` package can be
defined in two different ways.- By registering a global `root` package.
```
Exceptions.registerRootPackage("com.arthenica");
Exceptions.getStackTraceString(e);
```- By providing a `root` package while getting the stack trace.
```
Exceptions.getStackTraceString(e, "com.arthenica");
```- You will have the following stack trace string.
```
org.springframework.web.util.NestedServletException: Method not found.
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183)
at com.arthenica.smartexception.java.SpringTest.putUserTest(SpringTest.java:100)
```- Instead of this one.
```
org.springframework.web.util.NestedServletException: Method not found.
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183)
at com.arthenica.smartexception.java.SpringTest.putUserTest(SpringTest.java:100)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
... 35 more
```#### 2.2. Logback converters
Install `smart-exception-logback` by adding the following dependency to your `build.gradle`.
Note that `smart-exception-logback` requires Java 9 or later
```
dependencies {
implementation 'com.arthenica:smart-exception-logback:0.2.1'
}
```- Create a conversion rule to use `SmartExceptionConverter` in pattern layout
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg %smartEx{'rootPackage=com.arthenica','printModuleName=false','ignorePackage=jdk.internal','printPackageInformation=true'}%n
```
- Define a `throwableConverter` to format stack traces in `logstash-logback-encoder`
```xml
false
true
com.arthenica
org.springframework
jdk.internal
```### 3. Versions
| SmartException Version | Release Date |
|:--------------------------------------------------------------------------:|:------------:|
| [0.2.1](https://github.com/tanersener/smart-exception/releases/tag/v0.2.1) | May 30, 2022 |
| [0.2.0](https://github.com/tanersener/smart-exception/releases/tag/v0.2.0) | Mar 13, 2022 |
| [0.1.1](https://github.com/tanersener/smart-exception/releases/tag/v0.1.1) | Nov 28, 2021 |
| [0.1.0](https://github.com/tanersener/smart-exception/releases/tag/v0.1.0) | Apr 12, 2020 |### 4. Building
- Install Java 9 or later
- Run
```
./gradlew clean build
```See the build status from the table below.
| branch | status |
|:-----------:| :---: |
| main | ![build status](https://github.com/tanersener/smart-exception/actions/workflows/build.yml/badge.svg) |
| development | ![build status](https://github.com/tanersener/smart-exception/actions/workflows/build.yml/badge.svg?branch=development) |### 5. Wiki
A more detailed documentation is available at [Wiki](https://github.com/tanersener/smart-exception/wiki).
### 6. Modules
`SmartException` source code is organised into five modules.
- `common` includes shared classes and interfaces
- `java` has Java 7/8 and Android specific implementation
- `java9` has the implementation for Java 9 or later
- `logback` includes `logback` converter implementation
- `test` includes test classes that use library jars published in `mavenCentral()`### 7. License
This project is licensed under the `BSD 3-Clause License`.
### 8. Contributing
Feel free to submit issues or pull requests.