{"id":15013415,"url":"https://github.com/veliovgroup/meteor-logger-mongo","last_synced_at":"2026-04-01T20:58:05.363Z","repository":{"id":27253337,"uuid":"30725708","full_name":"veliovgroup/Meteor-logger-mongo","owner":"veliovgroup","description":"🍃 Meteor Logging: Store application log messages in MongoDB","archived":false,"fork":false,"pushed_at":"2022-06-03T08:18:06.000Z","size":63,"stargazers_count":22,"open_issues_count":1,"forks_count":6,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-20T17:13:12.013Z","etag":null,"topics":["javascript","logging","logging-library","logs","meteor","meteor-package","meteorjs","mongo","mongodb","mongodb-collections"],"latest_commit_sha":null,"homepage":"https://atmospherejs.com/ostrio/loggermongo","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veliovgroup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"dr-dimitru","custom":"https://paypal.me/veliovgroup"}},"created_at":"2015-02-12T21:48:30.000Z","updated_at":"2024-02-21T15:55:59.000Z","dependencies_parsed_at":"2022-09-01T02:11:50.165Z","dependency_job_id":null,"html_url":"https://github.com/veliovgroup/Meteor-logger-mongo","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger-mongo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger-mongo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger-mongo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger-mongo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veliovgroup","download_url":"https://codeload.github.com/veliovgroup/Meteor-logger-mongo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239918797,"owners_count":19718407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","logging","logging-library","logs","meteor","meteor-package","meteorjs","mongo","mongodb","mongodb-collections"],"created_at":"2024-09-24T19:44:15.422Z","updated_at":"2025-10-12T23:47:01.809Z","avatar_url":"https://github.com/veliovgroup.png","language":"JavaScript","funding_links":["https://github.com/sponsors/dr-dimitru","https://paypal.me/veliovgroup"],"categories":[],"sub_categories":[],"readme":"[![support](https://img.shields.io/badge/support-GitHub-white)](https://github.com/sponsors/dr-dimitru)\n[![support](https://img.shields.io/badge/support-PayPal-white)](https://paypal.me/veliovgroup)\n\u003ca href=\"https://ostr.io/info/built-by-developers-for-developers\"\u003e\n  \u003cimg src=\"https://ostr.io/apple-touch-icon-60x60.png\" height=\"20\"\u003e\n\u003c/a\u003e\n\n# Logging: To MongoDB\n\n*MongoDB* adapter for [logger driver](https://github.com/veliovgroup/Meteor-logger). Store application's logs and messages in MongoDB.\n\n*Whenever you log message(s) on Client or Sever, it goes directly into MongoDB.*\n\nFeatures:\n\n- 👷‍♂️ 100% tests coverage;\n- 💪 Flexible log level filters;\n- 👨‍💻 `userId` is automatically passed and logged, data is associated with logged-in user;\n- 📟 Pass logs from *Client* to MongoDB on *Server*;\n- 🕷 Catch all browser's errors and exceptions.\n\n## Installation:\n\n```shell\nmeteor add ostrio:logger # If not yet installed\nmeteor add ostrio:loggermongo\n```\n\n## ES6 Import:\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n```\n\n## Usage\n\nInitialize `Logger` instance and pass it into `LoggerMongo` constructor to enable logging into the log file.\n\n### Initialization [*Isomorphic*]\n\n`new LoggerMongo(LoggerInstance, options)`\n\n- `LoggerInstance` {*Logger*} - from `new Logger()`\n- `options` {*Object*}\n- `options.collection` {*Mongo.Collection*} - Use to pass your own MongoDB collection instance, {*[Mongo.Collection](https://docs.meteor.com/api/collections.html#Mongo-Collection)*} returned from `new Mongo.Collection()`\n- `options.collectionName` {*String*} - MongoDB collection name, default: `ostrioMongoLogger`\n- `options.format` {*Function*} - Must return plain object, which will be used as log-record. Arguments:\n  - `opts` {*Object*}\n  - `opts.userId` {*String*}\n  - `opts.date` {*Date*} - Report date\n  - `opts.timestamp` {*Number*} - Report timestamp in milliseconds\n  - `opts.level` {*String*} - Message level, one of: `ERROR`, `FATAL`, `WARN`, `DEBUG`, `INFO`, `TRACE`, `*`\n  - `opts.message` {*String*} - Report message\n  - `opts.additional` {*Object*} - Additional info passed as object\n\n__Note__: *You can't pass both* `collection` *and* `collectionName` *simultaneously. Set only one of those options.* If both options is presented `collection` is more prioritized\n\n#### Example:\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\n// Initialize Logger:\nconst log = new Logger();\n\n// Initialize and enable LoggerMongo with default settings:\n(new LoggerMongo(log)).enable();\n```\n\n#### Example 2:\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\n// Initialize Logger:\nconst log = new Logger();\nconst appLogs = new Mongo.Collection('appLogs');\n\n// Initialize LoggerMongo with collection instance:\nconst logMongo = new LoggerMongo(log, {\n  collection: appLogs\n});\n\n// Enable LoggerMongo with default settings:\nlogMongo.enable();\n```\n\n#### Example 3:\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\n// Initialize Logger:\nconst log = new Logger();\n\n// Initialize LoggerMongo with custom collection name:\nconst logMongo = new LoggerMongo(log, {\n  collectionName: 'appLogs'\n});\n\n// Enable LoggerMongo with default settings:\nlogMongo.enable();\n```\n\n#### Initialize with custom adapter settings: [*Isomorphic*]\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\nconst log = new Logger();\n(new LoggerMongo(log)).enable({\n  enable: true,\n  filter: ['ERROR', 'FATAL', 'WARN'], // Filters: 'ERROR', 'FATAL', 'WARN', 'DEBUG', 'INFO', 'TRACE', '*'\n  client: true, // Set to `false` to avoid Client to Server logs transfer\n  server: true  // Allow logging on Server\n});\n```\n\n### Logging Collection Schema:\n\n```js\n({\n  userId: {\n    type: String\n  },\n  date: {\n    type: Date\n  },\n  timestamp: {\n    type: Number\n  },\n  level: {\n    type: String\n  },\n  message: {\n    type: String\n  },\n  additional: {  // \u003c- passed object into 'data' argument\n    type: Object // upon logging will be available for search\n  }\n});\n```\n\n### Set custom indexes on collection: [*Server*]\n\nRead more at: [ensureIndex docs](https://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/)\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\nconst log = new Logger();\nconst logMongo = new LoggerMongo(log, {\n  collectionName: 'appLogs' // Use custom collection name\n});\n\nif (Meteor.isServer) {\n  // PRECAUTION: make sure you understand what you're doing and why\n  // Do not ever blindly copy-paste, see: https://github.com/veliovgroup/Meteor-logger-mongo/issues/19\n  logMongo.collection._ensureIndex({level: 1}, {background: true});\n  logMongo.collection._ensureIndex({userId: 1}, {background: true});\n  logMongo.collection._ensureIndex({date: 1}, {background: true});\n  logMongo.collection._ensureIndex({timestamp: 1}, {background: true});\n}\n```\n\n### Log message: [*Isomorphic*]\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\nconst log = new Logger();\n(new LoggerMongo(log)).enable();\n\n/*\n  message {String} - Any text message\n  data    {Object} - [optional] Any additional info as object\n  userId  {String} - [optional] Current user id\n */\nlog.info(message, data, userId);\nlog.debug(message, data, userId);\nlog.error(message, data, userId);\nlog.fatal(message, data, userId);\nlog.warn(message, data, userId);\nlog.trace(message, data, userId);\nlog._(message, data, userId); // Shortcut\n\n// Use with throw\nthrow log.error(message, data, userId);\n```\n\n### Catch-all Client's errors example: [*Client*]\n\n```js\n/* Store original window.onerror */\nconst _GlobalErrorHandler = window.onerror;\n\nwindow.onerror = function (msg, url, line) {\n  log.error(msg, {file: url, onLine: line});\n  if (_GlobalErrorHandler) {\n    _GlobalErrorHandler.apply(this, arguments);\n  }\n};\n```\n\n### Catch-all Server's errors example: [*Server*]\n\n```js\nconst bound = Meteor.bindEnvironment((callback) =\u003e {callback();});\nprocess.on('uncaughtException', function (err) {\n  bound(() =\u003e {\n    log.error('Server Crashed!', err);\n    console.error(err.stack);\n    process.exit(7);\n  });\n});\n```\n\n### Catch-all Meteor's errors example: [*Server*]\n\n```js\n// store original Meteor error\nconst originalMeteorDebug = Meteor._debug;\nMeteor._debug = function (message, stack) {\n  const additional = { message };\n  additional.stack = util.inspect(stack, false, null).split('\\n');\n  log.error('Meteor Error!', additional);\n  return originalMeteorDebug.apply(this, arguments);\n};\n```\n\n### Use multiple logger(s) with different settings: [*Isomorphic*]\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\nimport { LoggerMongo } from 'meteor/ostrio:loggermongo';\n\nconst log1 = new Logger();\nconst log2 = new Logger();\n\n/*\n * Separate settings and collection\n * for info, debug and other messages\n */\n(new LoggerMongo(log1, {\n  collectionName: 'appLogs'\n})).enable({\n  filter: ['DEBUG', 'INFO', 'LOG', 'TRACE'],\n  client: true,\n  server: true\n});\n\n/*\n * Separate settings and collection\n * for errors, exceptions, warnings and etc.\n */\n(new LoggerMongo(log2, {\n  collectionName: 'AppErrors'\n})).enable({\n  filter: ['ERROR', 'FATAL', 'WARN'],\n  client: true,\n  server: true\n});\n```\n\n## Running Tests\n\n 1. Clone this package\n 2. In Terminal (*Console*) go to directory where package is cloned\n 3. Then run:\n\n### Meteor/Tinytest\n\n```shell\nmeteor test-packages ./\n```\n\n## Support this awesome package:\n\n- Star on [GitHub](https://github.com/veliovgroup/Meteor-logger-mongo)\n- Star on [Atmosphere](https://atmospherejs.com/ostrio/loggermongo)\n- [Tweet](https://twitter.com/share?url=https://github.com/veliovgroup/Meteor-logger-mongo\u0026text=Store%20%23meteorjs%20log%20messages%20in%20MongoDB%20%23javascript%20%23programming%20%23webdev%20via%20%40veliovgroup)\n- Share on [Facebook](https://www.facebook.com/sharer.php?u=https://github.com/veliovgroup/Meteor-logger-mongo)\n\n## Support our open source contribution:\n\n- [Sponsor via GitHub](https://github.com/sponsors/dr-dimitru)\n- [Support via PayPal](https://paypal.me/veliovgroup)\n- Use [ostr.io](https://ostr.io) — [Monitoring](https://snmp-monitoring.com), [Analytics](https://ostr.io/info/web-analytics), [WebSec](https://domain-protection.info), [Web-CRON](https://web-cron.info) and [Pre-rendering](https://prerendering.com) for a website\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveliovgroup%2Fmeteor-logger-mongo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveliovgroup%2Fmeteor-logger-mongo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveliovgroup%2Fmeteor-logger-mongo/lists"}