Skip to content

harvve/tslog-mongodb-transport

Repository files navigation

tslog-mongodb-transport

The library allows logs to be stored in the mongodb timeseries collection.

Build & Test

Contributors Forks Stargazers Issues MIT License

Table of Contents
  1. About The Project
  2. Installation
  3. Usage
    1. Settings
  4. Contributing
  5. License
  6. Contact
  7. Acknowledgments

About The Project

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.

Installation

Requires: MongoDB >= v5.0, mongodb >= v4 driver and tslog >= v4

npm i @harvve/tslog-mongodb-transport

Usage

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

Settings

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) ---

(back to top)

Contributing

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Project Link: https://github.com/harvve/tslog-mongodb-transport

Acknowledgments

(back to top)