The library allows logs to be stored in the mongodb timeseries collection.
Table of Contents
This library provides a transporter that allows logs to be written to the timeseries collection in MongoDB. The transporter simplifies configuration and ensures optimal writes to the database through log batching. It provides flexible out-of-the-box configuration and the ability to customise parameters according to your needs.
Requires: MongoDB >= v5.0, mongodb >= v4 driver and tslog >= v4
npm i @harvve/tslog-mongodb-transport
Attach transport to tslog instance.
import { Logger } from 'tslog';
import { MongoClient } from 'mongodb';
import { Transporter } from '@harvve/tslog-mongodb-transport';
async function main(): Promise<void> {
const client = await new MongoClient('mongodb://localhost:27017').connect();
const mongodbTransporter = new Transporter({ db: client.db('logs_db') });
const logger = new Logger({
// on production set to true for better performance
// https://tslog.js.org/#/?id=hidelogpositionforproduction-default-false
hideLogPositionForProduction: false,
argumentsArrayName: 'argumentsArray', // default key name used by Transporter
metaProperty: 'metadata', // default key name used by Transporter
attachedTransports: [mongodbTransporter.transport.bind(mongodbTransporter)]
});
logger.info('Hello!');
}
Check out working example --> View Demo
All possible settings are defined in the ITransporterOptions
interface and modern IDEs will provide auto-completion accordingly.
Key | Type | Requirement | Description | Default |
---|---|---|---|---|
db | Db |
required | class that represents a MongoDB Database (from mongodb lib) |
--- |
collectionName | string |
optional | the name of collection in mongodb | logs |
granuality | seconds minutes hours |
optional | the timeseries data granularity | seconds |
argumentsArrayName | string |
optional | the logger arguments property key name | argumentsArray |
bucketSize | number |
optional | the size of the bucket with logs suitable for writing | 5000 |
updateInterval | number |
optional | the number of seconds between logs that must elapse to record an incomplete bucket | 1sec |
logTTL | number |
optional | the lifetime (in seconds) of the document in the collection | 2592000sec (30days) |
onErrorCallback(err: unknown) | function |
optional | callback function called when an error occurs | --- |
onBeforeWriteCallback(bucketLength: number) | function |
optional | callback function called before write (bucketLength - current length of items in bucket ) |
--- |
onAfterWriteCallback(insertResult: InsertManyResult, bucketLength: number) | function |
optional | callback function called after successful writing (insertResult - insert stats, bucketLength - current length of items in bucket ) |
--- |
onFinallyWriteCallback(bucketLength: number) | function |
optional | callback function called when recording has been completed (bucketLength - current length of items in bucket ) |
--- |
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Project Link: https://github.com/harvve/tslog-mongodb-transport