Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pinojs/pino-mongodb
:evergreen_tree: Insert JSON from stdin into MongoDB
https://github.com/pinojs/pino-mongodb
insert logging mongodb nodejs pino-logs pino-mongodb
Last synced: 4 days ago
JSON representation
:evergreen_tree: Insert JSON from stdin into MongoDB
- Host: GitHub
- URL: https://github.com/pinojs/pino-mongodb
- Owner: pinojs
- License: mit
- Created: 2016-10-21T09:23:49.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-29T07:11:58.000Z (8 months ago)
- Last Synced: 2024-12-11T13:51:57.435Z (11 days ago)
- Topics: insert, logging, mongodb, nodejs, pino-logs, pino-mongodb
- Language: JavaScript
- Homepage:
- Size: 355 KB
- Stars: 55
- Watchers: 8
- Forks: 18
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pino-mongodb
[![npm version](https://img.shields.io/npm/v/pino-mongodb)](https://www.npmjs.com/package/pino-mongodb)
[![Build Status](https://img.shields.io/github/workflow/status/pinojs/pino-mongodb/CI)](https://github.com/pinojs/pino-mongodb/actions)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)> Insert JSON from stdin into MongoDB
This project is part of the `pino` logger family, however you can use it to parse and insert any
`JSON` into the `mongo`.## Install
```bash
$ npm i pino-mongodb
```## Usage as Pino Transport
You can use this module as a [pino transport](https://getpino.io/#/docs/transports?id=v7-transports) like so:
```js
const pino = require('pino')
const transport = pino.transport({
target: 'pino-mongodb',
level: 'info',
options: {
uri: 'mongodb://localhost:27017/',
database: 'logs',
collection: 'log-collection',
mongoOptions: {
auth: {
username: 'one',
password: 'two'
}
}
}
})pino(transport)
```The `mongoOptions` is provided to the the standard mongodb client. All the available options are described on [its official documentation](https://mongodb.github.io/node-mongodb-native/4.1/interfaces/MongoClientOptions.html).
Note that you may encouter missing logs in special cases: it dependes on data and mongo's version. Please checkout the [mongodb limitation](https://docs.mongodb.com/manual/reference/limits/) official documentation.
For example on MongoDB 4:```js
// IT DOES NOT WORK:
log.info({ $and: [{ a: 1 }, { b: 2 }] }, 'my query is')// IT WORKS:
log.info({ query: { $and: [{ a: 1 }, { b: 2 }]} }, 'my query is')
```If you want a custom parser to handle the above case. You need to wrap `pino-mongo` and pass a function through `option.parseLine`. Any value that is not a function will be ignored in this option.
```js
// mongo-transport.js
'use strict'const transport = require('pino-mongodb')
module.exports = function(opts) {
opts.parseLine = function(str) { // `str` is passed from `pino` and expected to be a string
const obj = JSON.parse(str)
// do anything you want...return obj // return value is expected to be a json that will pass and save inside mongodb
}
return transport(opts)
}// main.js
const pino = require('pino')
const transport = pino.transport({
target: './mongo-transport.js',
uri: 'mongodb://localhost:27017/logs',
collection: 'log-collection',
})
pino(transport)
```## Usage as Pino Legacy Transport
Pino supports a [legacy transport interface](https://getpino.io/#/docs/transports?id=legacy-transports)
that is still supported by this module.### Get started
```bash
$ echo '{"name": "Viktor"}' | pino-mongodb [options] [mongo-url]
``````bash
$ cat many.logs | pino-mongodb [options] [mongo-url]
``````bash
$ node ./app.js | pino-mongodb [options] [mongo-url]
```### CLI Options
```
Usage: pino-mongodb [options] [mongo-url]Insert JSON from stdin into MongoDB
Options:
-V, --version output the version number
-c, --collection database collection (default: "logs")
-o, --stdout output inserted documents into stdout (default:
false)
-e, --errors output insertion errors into stderr (default: false)
-h, --help display help for command
```## Tests
To run unit tests:
```bash
$ npm t
```To run integrational tests with real mongo server:
```bash
$ npm run trial
```Note, you will have to have `docker` and `docker-compose` installed
on your machine for that!## License
Licensed under [MIT](./LICENSE).