Skip to content

Parse Java stack traces and transform them into comprehensive JS objects

License

Notifications You must be signed in to change notification settings

tbouron/java-stack-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-stack-parser

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) Travis Codacy Codecov
develop Travis Codacy Codecov

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'), 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

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

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.

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

License

This library is released under Apache 2.0 license

About

Parse Java stack traces and transform them into comprehensive JS objects

Resources

License

Stars

Watchers

Forks

Packages

No packages published