Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A client-side error logging framework written in Javascript/Scala
JavaScript Scala
Tree: 6d3fd6e020

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
project
src/main
.gitignore
README.md
build.sbt

README.md

goose-log

goose-log is a client-side logging framework written in Scala using Scalatra and logula

Setup

Building

  1. Install sbt 0.11.2.
  2. Run sbt in the root project directory.
  3. Use the container:start target to start the service:
bburton$ sbt
> container:start
[info] Started SelectChannelConnector@0.0.0.0:8080 STARTING
[success] Total time: 10 s, completed Apr 7, 2012 9:20:31 AM

IntelliJ IDEA Support

  1. Install the Scala and sbt plugins.
  2. Use the sbt-idea sbt plugin target to generate the project files:
bburton$ sbt
> gen-idea
[info] Trying to create an Idea module default-eb8248
[info] Excluding folder target
[info] Created /Users/bburton/Documents/workspace-scala/goose-log/.idea/goose-log.iml
[info] Created /Users/bburton/Documents/workspace-scala/goose-log/.idea
[info] Excluding folder /Users/bburton/Documents/workspace-scala/goose-log/target
[info] Created /Users/bburton/Documents/workspace-scala/goose-log/.idea_modules/default-eb8248.iml
[info] Created /Users/bburton/Documents/workspace-scala/goose-log/.idea_modules/project.iml
  1. Launch IntelliJ IDEA and select File > Open Project, choosing the goose-log folder as the project root.

Logging

You can use the client-side logger provided here: TODO -- add JS code for frontend

JSON Logging Request Formats

Basic

goose-log processes JSON requests of the following format:

{
  "details" : {
    "event" : "inbox.message.read",
    "message" : "inbox message not found exception"
  }
}

It expects a top-level key of "details" which can contain an arbitrary JSON object rendered in the server logs as:

> ERROR [2012-04-07 20:38:01,666] com.goose.logging.ErrorLoggingServlet: 
  User Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.27) Gecko/20120216 Firefox/3.6.27
  Origin: http://fiddle.jshell.net
  Timestamp: Sat Apr 07 16:38:01 EDT 2012
  Details:
    event: inbox.message.read
    message: inbox message not found exception

Optional Parameters

Any of the additional metadata parameters (User Agent, Origin, Timestamp) can be explicitly overridden in the JSON request (TODO this isn't actually true at the moment):

{
  "userAgent" : "Lynx/2.8.5dev.16 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6b",
  "origin" : "http://www.google.com/",
  "timestamp" : 978310861000,
  "details" : {
    "event" : "inbox.message.read",
    "message" : "inbox message not found exception"
  }
}

generates the corresponding log entry:

> ERROR [2012-04-07 20:38:01,666] com.goose.logging.ErrorLoggingServlet:
  User Agent: Lynx/2.8.5dev.16 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6b
  Origin: http://www.google.com/
  Timestamp: Sun Dec 31 20:01:01 EST 2000
  Details:
    event: inbox.message.read
    message: inbox message not found exception

Note that the timestamp JSON will accept a Long value representing milliseconds since the Unix epoc, or a string representing a timestamp to be written to the log explicitly.

The Provider Parameter

You can add a provider. It writes to a files with that name. (TODO: rewrite this copy)

For example, the JSON request

{
  "provider" : "my-awesome-webapp",
  "details" : {
    "event" : "inbox.message.read",
    "message" : "inbox message not found exception"
  }
}

will append to the file my-awesome-webapp.log in the default directory (currently /var/log/).

Sending a JSON List

Instead of passing error logging requests one-at-a-time, the logger can accept a JSON list of objects:

[{
  "details" : {
    "event" : "inbox.message.read",
    "message" : "inbox message not found exception"
  }
},{
  "details" : {
    "event" : "user.authentication",
    "message" : "bad user authentication information"
  }
}]
Something went wrong with that request. Please try again.