Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zeiss/appinsights-express-middleware

Middleware for handling Microsoft Application Insights inside an express application. :rocket:
https://github.com/zeiss/appinsights-express-middleware

application-insights azure express middleware nodejs typescript

Last synced: 4 days ago
JSON representation

Middleware for handling Microsoft Application Insights inside an express application. :rocket:

Awesome Lists containing this project

README

        

# Express Middleware for Microsoft Application Insights

[![Build Status](https://img.shields.io/travis/ZEISS/appinsights-express-middleware/master.svg?style=flat-square)](https://travis-ci.org/ZEISS/appinsights-express-middleware)
[![npm](https://img.shields.io/npm/v/appinsights-express-middleware.svg?style=flat-square)](https://www.npmjs.com/package/appinsights-express-middleware)
[![GitHub issues](https://img.shields.io/github/issues/ZEISS/appinsights-express-middleware.svg?style=flat-square)](https://github.com/ZEISS/appinsights-express-middleware/issues)

A simple middleware for exposing [Microsoft Application Insights](https://azure.microsoft.com/services/application-insights/) in your [Express](http://expressjs.com/) application. :rocket:

## Getting started

`npm install appinsights-express-middleware@latest`

## Example Usage

For setting up logging in your application you need to import the `logger` function and pass your application as the first parameter and your Application Insights key in the option object as the second parameter. If no explicit key is given then `process.env.APPINSIGHTS_INSTRUMENTATIONKEY` will be tried.

```js
import * as express from 'express';
import { logger } from 'appinsights-express-middleware';

const app = express();
app.use(logger(app, { key: 'YOUR_INSTRUMENTATION_KEY' }));

app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
```

For tracking errors you need to import the middleware explictly and pass it to express after all other `app.use()` and route calls.

```js
import * as express from 'express';
import * as bodyParser from 'body-parser'
import { logError } from 'appinsights-express-middleware';

const app = express();
app.use(logger(app, { key: 'YOUR_INSTRUMENTATION_KEY', traceErrors: true }));
app.use(bodyParser.json());
app.use(logError);

app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
```

With this setup Express will log every request and track every error and send it to Application Insights. But how about logging inside your routes, or different parts of your application?

### Logging during a request
After you set up the logger it is available through the `res` object.

```js
import * as express from 'express';
import { logger } from 'appinsights-express-middleware';

const app = express();
app.use(logger(app, { key: 'YOUR_INSTRUMENTATION_KEY' }));

app.get('/', (req, res) => {
res.locals.logger.trackEvent('page', {
val: 'extra information',
requestId: res.locals.requestId
});

res.send('hello world');
});

app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
```
Keep in mind that the `requestId` is not required, it is provided as a convenience to correlate logs for request.

### Logging outside of the request loop

Logging can also be done outside the HTTP Request context. For that use the `app.locals.logger` object:

#### app.js

```js
import * as express from 'express';
import { logger } from 'appinsights-express-middleware';

export const app = express();

app.use(logger(app, { key: 'YOUR_INSTRUMENTATION_KEY' }));

app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
```

#### server.js

```js
import { app } from './app';
import * as http from 'http';

const server = http.createServer(app);

const errorHandler = error => {
app.locals.logger.traceError(error, 'Error during startup.');
}

const listeningHandler = () => {
app.locals.logger.traceInfo('Server listening.', {
port: server.address().port
});
}

server.on('error', errorHandler);
server.on('listening', listeningHandler);
```

## Logging API

```typescript
traceInfo(message: string, properties?: {[key: string]: string}): void;
traceError(error: Error, message: string, properties?: {[key: string]: string}): void;
traceWarning(message: string, properties?: {[key: string]: string}): void;
traceVerbose(message: string, properties?: {[key: string]: string}): void;
traceCritical(message: string, properties?: {[key: string]: string});

trackEvent(name: string, properties?: {[key: string]: string}): void;
trackMetric(name: string, value: number): void;
trackRequest(req: express.Request, res: express.Response): void
```