java-stack-parser

1.0.0 • Public • Published

java-stack-parser

Parse Java stack traces and transform them into comprehensive JS objects

Install

You can install this package either with npm, yarn or bower.

npm / yarn

For npm:

~$ npm install java-stack-parser

For yarn:

~$ yarn add java-stack-parser

Then, you can require('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

~$ 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>

Documentation

The library defines 3 objects:

  • Stack: represents the full stacktrace. It is compose of a list of StackGroups.
  • StackGroup represents a group of consecutive StackLines with the same StackPackage.
  • StackLine represents a line of the full stacktrace, e.g. at java.net.SocketInputStream.read(SocketInputStream.java:185).
  • StackPackage represents the package of the current StackLine. Taking the StackLine above, the resulting StackPackage will be java.net.

Stack Object

This object is used to parse and transform a string representing a Java stack trace. Here is an example of how to use it. Alternatively, you can check out the working demo

let stacktrace = '...';
let stack = new Stack();
 
stack.parse(stacktrace);
 
// Display stack trace information into the console
stack.groups.forEach((group)=> {
    console.log('Package: ' + group.stackPackage.name + ' contains ' + group.lines.length + ' lines');
    group.lines.forEach((line)=> {
        console.log(line.javaClass + '.' java.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 stacktrace = '...';
let stack = new Stack({
    'My libraries': ['com.acme', 'my.library'],
    "Java/Sun/Oracle": ["java", "javax", "sun", "sunw", "com.sun", "com.oracle"],
    "Apache": ["org.apache"],
});
 
stack.parse(stacktrace);
 
// Display stack trace information into the console
stack.groups.forEach((group)=> {
    console.log('Package: ' + group.stackPackage.name + ' contains ' + group.lines.length + ' lines');
    group.lines.forEach((line)=> {
        console.log(line.javaClass + '.' java.method + ' (Source: ' + line.source + ' at line: ' line.line + ')');
    });
});

Now, if the stack trace contains consecutive lin with the package com.acme or my.library, they will be group under the same StackGroup.

Development

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 covergae 
~$ npm run coverage

License

This library is released under Apache 2.0 license

Package Sidebar

Install

npm i java-stack-parser

Weekly Downloads

6

Version

1.0.0

License

Apache-2.0

Last publish

Collaborators

  • tbouron