Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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:
- Host: GitHub
- URL: https://github.com/zeiss/appinsights-express-middleware
- Owner: ZEISS
- License: mit
- Created: 2018-02-23T09:28:43.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-11-28T01:09:31.000Z (12 months ago)
- Last Synced: 2024-04-14T23:24:19.561Z (7 months ago)
- Topics: application-insights, azure, express, middleware, nodejs, typescript
- Language: TypeScript
- Homepage:
- Size: 351 KB
- Stars: 6
- Watchers: 5
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
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
```