Parse Java stack traces and transform them into comprehensive JS objects
You can checkout this working demo to see how it looks like.
Branch | Build | Grade | Test coverage |
---|---|---|---|
master (Stable) |
|||
develop |
You can install this package either with npm
, yarn
or bower
.
For npm:
~$ npm install java-stack-parser
For yarn:
~$ yarn add java-stack-parser
Then, you can require('java-stack-parser')
, import from 'java-stack-parser'
or include the library in your web page directly via a <script>
tag
<script src="/node_modules/java-stack-parser/lib/java-stack-parser.min.js"></script>
~$ bower install java-stack-parser
Then, you can include the library in your web page directly via a <script>
tag
<script src="/bower_components/java-stack-parser/lib/java-stack-parser.min.js"></script>
The library defines 3 objects:
Stack
: represents the full stacktrace. It is compose of a list ofStackGroup
s.StackGroup
represents a group of consecutiveStackLine
s with the sameStackPackage
.StackLine
represents a line of the full stacktrace, e.g.at java.net.SocketInputStream.read(SocketInputStream.java:185)
.StackPackage
represents the package of the currentStackLine
. Taking theStackLine
above, the resultingStackPackage
will bejava.net
.
This object is used to parse and transform a string representing a Java stack trace. Here is an example of how to use it:
import {Stack} from 'java-stack-parser';
let stacktrace = '...';
let stack = new Stack();
stack.parse(stacktrace);
// Display stack trace information into the console
stack.groups.forEach((group)=> {
if (group.exception) {
console.log('[' + group.exception.exception + '] ' + group.exception.message);
}
console.log('Package: ' + group.stackPackage.name + ' contains ' + group.lines.length + ' lines');
group.lines.forEach((line)=> {
console.log(line.javaClass + '.' + line.method + ' (Source: ' + line.source + ' at line: ' + line.line + ')');
});
});
The Stack
object gives you the ability of defining your own "vendor" packages, resulting of a better grouping. For example, if your application uses 2 libraries with a groupId of com.acme
and my.library
, you can pass this as an optional parameter to the constructor:
let stack = new Stack({
'My libraries': ['com.acme', 'my.library'],
"Java/Sun/Oracle": ["java", "javax", "sun", "sunw", "com.sun", "com.oracle"],
"Apache": ["org.apache"],
});
Now, if the stack trace contains consecutive lin with the package com.acme
or my.library
, they will be group under the same StackGroup
.
To build the library in development mode (non-uglified, with a watch on the source) simply do:
~$ npm run dev
For the production version:
~$ npm run build
You can run tests and check the coverage with the following 2 commands:
# Run tests
~$ npm test
# Check coverage
~$ npm run coverage
This library is released under Apache 2.0 license