{"id":15013394,"url":"https://github.com/veliovgroup/meteor-logger","last_synced_at":"2025-04-12T04:42:08.238Z","repository":{"id":27244325,"uuid":"30716372","full_name":"veliovgroup/Meteor-logger","owner":"veliovgroup","description":"🧾 Meteor isomorphic logger. Store application logs in File (FS), MongoDB, or print in Console","archived":false,"fork":false,"pushed_at":"2022-06-03T07:57:23.000Z","size":192,"stargazers_count":54,"open_issues_count":2,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-20T17:12:34.608Z","etag":null,"topics":["driver","logger","logging","meteor","meteor-logger","meteor-package","meteorjs"],"latest_commit_sha":null,"homepage":"https://packosphere.com/ostrio/logger","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-12T18:13:19.000Z","updated_at":"2025-02-12T00:42:14.000Z","dependencies_parsed_at":"2022-07-25T17:22:00.533Z","dependency_job_id":null,"html_url":"https://github.com/veliovgroup/Meteor-logger","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2FMeteor-logger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veliovgroup","download_url":"https://codeload.github.com/veliovgroup/Meteor-logger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239918730,"owners_count":19718394,"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":["driver","logger","logging","meteor","meteor-logger","meteor-package","meteorjs"],"created_at":"2024-09-24T19:44:13.820Z","updated_at":"2025-02-20T21:30:51.874Z","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# Isomorphic logging driver\n\nLogger driver for Meteor.js with different adapters. To use this package install an adapter (*separately*):\n\n- [File](https://atmospherejs.com/ostrio/loggerfile) - Store application log messages into the file (FS), log rotation included;\n- [Mongo](https://atmospherejs.com/ostrio/loggermongo) - Store application log messages into MongoDB;\n- [Console](https://atmospherejs.com/ostrio/loggerconsole) - Print Client's application log messages to Server's console, messages colorized for better readability.\n\n## Features:\n\n- 👷‍♂️ 100% tests coverage;\n- 💪 Flexible log level filters, ex: write `FATAL`, `ERROR`, and `WARN` to file, `DEBUG` to console, and all other to MongoDB;\n- 👨‍💻 `userId` is automatically passed and logged, data is associated with logged-in user;\n- 📟 Pass logs from *Client* to *Server*;\n- 🕷 Catch all browser's errors.\n\n![Meteor Logger Library](https://raw.githubusercontent.com/veliovgroup/Meteor-logger/master/meteor-logger.jpg)\n\n## Installation:\n\n```shell\nmeteor add ostrio:logger\n```\n\n### ES6 Import:\n\n```js\nimport { Logger } from 'meteor/ostrio:logger';\n```\n\n## Usage\n\nInitiate a logger and pass it into the adapter constructor\n\n### Logger [*Isomorphic*]\n\n```js\nconst log = new Logger();\n\n/* Activate adapters with default settings */\n/* meteor add ostrio:loggerfile */\nnew LoggerFile(log).enable();\n/* meteor add ostrio:loggermongo */\nnew LoggerMongo(log).enable();\n/* meteor add ostrio:loggerconsole */\nnew LoggerConsole(log).enable();\n\n/* Log message\n * message {String|Number} - 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); //--\u003e Plain 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 = (message, stack) =\u003e {\n  const error = new Error(message);\n  error.stack = stack;\n  log.error('Meteor Error!', error);\n  return originalMeteorDebug.apply(this, arguments);\n};\n```\n\n### Register new adapter [*Isomorphic*]\n\n*Mainly should be used by adapter developers, a.k.a. developer API.*\n\n```js\n/**\n * Logger#add() — register new adapter\n * \n *  Emitter function\n * name        {String}    - Adapter name\n * emitter     {Function}  - Function called on Meteor.log...\n * init        {Function}  - Adapter initialization function\n * denyClient  {Boolean}   - Strictly deny execution on client\n * denyServer  {Boolean}   - Strictly deny execution on server\n * Example: log.add(name, emitter, init, denyClient, denyServer);\n */\n\nconst emitter = (level, message, data, userId) =\u003e {\n  /* .. do something with a message .. */\n};\n\nconst init = () =\u003e {\n  /* Initialization function */\n  /* For example create a collection */\n  log.collection = new Meteor.Collection('logs');\n};\n\nlog.add('AdapterName', emitter, init, true, false);\n```\n\n### Enable/disable adapter and set its settings [*Isomorphic*]\n\n```js\n/**\n * Logger#rule() — register adapter default rules\n *\n * name    {String} - Adapter name\n * options {Object} - Settings object, accepts next properties:\n * options.enable {Boolean} - Enable/disable adapter\n * options.filter {Array}   - Array of strings, accepts:\n *                            'ERROR', 'FATAL', 'WARN', 'DEBUG', 'INFO', '*'\n *                            in lowercase and uppercase\n *                            default: ['*'] - Accept all\n * options.client {Boolean} - Allow execution on Client\n * options.server {Boolean} - Allow execution on Server\n * Example: log.rule(name, options);\n */\n\n/* Example: */\nlog.rule('AdapterName', {\n  enable: true,\n  filter: ['ERROR', 'FATAL', 'WARN'],\n  client: false, /* Allow to call, but not execute on Client */\n  server: true   /* Calls from client will be executed on Server */\n});\n```\n\n## Running Tests\n\n1. Clone this package\n2. In Terminal (*Console*) go to directory where package is cloned\n3. Then run:\n\n### Meteor/Tinytest\n\n```shell\n# Default\nmeteor test-packages ./\n\n# With custom port\nmeteor test-packages ./ --port 8888\n\n# With local MongoDB and custom port\nMONGO_URL=\"mongodb://127.0.0.1:27017/logger-tests\" meteor test-packages ./ --port 8888\n```\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","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveliovgroup%2Fmeteor-logger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveliovgroup%2Fmeteor-logger/lists"}