{"id":24965778,"url":"https://github.com/allnulled/superlogger","last_synced_at":"2025-03-29T01:19:25.165Z","repository":{"id":274285197,"uuid":"922457593","full_name":"allnulled/superlogger","owner":"allnulled","description":"Logger with some features: cross-env, leveling, deactivation, event emitter, before and after, centralization, custom ids, function debugging.","archived":false,"fork":false,"pushed_at":"2025-01-26T09:20:00.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T11:16:09.389Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/allnulled.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-26T09:07:03.000Z","updated_at":"2025-01-26T09:20:04.000Z","dependencies_parsed_at":"2025-01-26T10:22:59.959Z","dependency_job_id":"caa48b33-1b70-4f2a-b928-a4178887d2d2","html_url":"https://github.com/allnulled/superlogger","commit_stats":null,"previous_names":["allnulled/superlogger"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fsuperlogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fsuperlogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fsuperlogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fsuperlogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allnulled","download_url":"https://codeload.github.com/allnulled/superlogger/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246122473,"owners_count":20726834,"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":[],"created_at":"2025-02-03T11:16:11.086Z","updated_at":"2025-03-29T01:19:25.147Z","avatar_url":"https://github.com/allnulled.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# superlogger\n\nLogger with some features: cross-env, leveling, deactivation, event emitter, before and after, centralization, custom ids, function stringification.\n\n## Installation\n\n```sh\nnpm install @allnulled/superlogger\n```\n\n## Importation\n\nIn node.js:\n\n```js\nrequire(\"@allnulled/superlogger\");\n```\n\nIn html:\n\n```html\n\u003cscript src=\"node_modules/@allnulled/superlogger/superlogger.bundled.js\"\u003e\u003c/script\u003e\n```\n\n## Usage\n\n```js\nconst logger1 = Superlogger.create(\"angular\");\nconst logger2 = Superlogger.create(\"jquery\");\nconst logger3 = Superlogger.create(\"moment.js\");\n\nlogger1.trace(\"method.id\", \"From trace\");\nlogger1.log(\"From log\");\nlogger1.debug(\"From debug\");\nlogger1.warn(\"From warn\");\nlogger1.error(\"From error\");\n\nlogger1.setBefore(console.log);\nlogger1.setAfter(console.log);\nlogger1.resetCallbacks();\n\nlogger1.setLevel(\"trace\", console.log);\nlogger1.setLevel(\"debug\", console.log);\nlogger1.setLevel(\"log\", console.log);\nlogger1.setLevel(\"warn\", console.log);\nlogger1.setLevel(\"error\", console.log);\nlogger1.resetEvents();\n\n\n```\n\n## Test\n\nCurrent state, that provides full coverage report, looks like:\n\n```js\nrequire(__dirname);\n\nconst loggers = {};\n\ndescribe(\"Superlogger API Test\", function (it) {\n\n  it(\"can create instances\", async function () {\n    loggers.one = Superlogger.create(\"one\");\n    loggers.two = Superlogger.create(\"two\");\n    loggers.three = Superlogger.create(\"three\");\n    loggers.unnamed = Superlogger.create();\n    const { one } = loggers;\n    one.setLevel(\"log\");\n    one.trace(\"method\", \"ok\");\n    one.debug(\"ok\");\n    one.log(\"ok\");\n    one.warn(\"ok\");\n    one.error(\"ok\");\n    one.warn({ fn: () =\u003e 500 * 8 })\n  });\n\n  it(\"can activate and deactivate\", async function () {\n    const { one } = loggers;\n    one.activate();\n    one.log(\"this should be printed\");\n    one.deactivate();\n    one.log(\"this should NOT be printed\");\n    one.activate();\n    one.log(\"this should be printed\");\n  });\n\n  it(\"can use trace with different method signature\", async function () {\n    const { one } = loggers;\n    one.setLevel(\"trace\");\n    one.trace(\"method.id\", { data: () =\u003e \"whatever\" });\n  });\n\n  it(\"can set and unset events\", async function () {\n    const { one } = loggers;\n    const traces = [];\n    one.setEvent(\"trace\", () =\u003e traces.push(\"trace\"));\n    one.setEvent(\"debug\", () =\u003e traces.push(\"debug\"));\n    one.setEvent(\"log\", () =\u003e traces.push(\"log\"));\n    one.setEvent(\"warn\", () =\u003e traces.push(\"warn\"));\n    one.setEvent(\"error\", () =\u003e traces.push(\"error\"));\n    one.trace(\"method.id\", { data: () =\u003e \"whatever\" });\n    one.debug({ data: () =\u003e \"debug\" });\n    one.warn({ data: () =\u003e \"warn\" });\n    one.log({ data: () =\u003e \"log\" });\n    one.error({ data: () =\u003e \"error\" });\n    console.log(traces);\n    const ensureState = it =\u003e {\n      return Array.isArray(it) \u0026\u0026 it.length === 5 \u0026\u0026 it[0] === \"trace\";\n    };\n    ensure({ traces }).can(ensureState);\n    one.resetEvents();\n    one.trace(\"method.id\", () =\u003e traces.push(\"trace2\"));\n    ensure({ traces }).can(ensureState);\n  });\n\n  it(\"can set and unset callbacks\", async function () {\n    const { one } = loggers;\n    let counter = 0;\n    one.setBefore(() =\u003e { counter += 100; });\n    one.setAfter(() =\u003e { counter += 1; });\n    one.log(\"hi!\");\n    one.log(\"hi!\");\n    one.log(\"hi!\");\n    ensure({ counter }).is(303);\n    one.log(\"hi!\");\n    ensure({ counter }).is(404);\n    one.resetCallbacks();\n    one.log(\"hi!\");\n    ensure({ counter }).is(404);\n  });\n\n  it(\"can set and get source\", async function () {\n    const { one } = loggers;\n    const source = 500;\n    one.setSource(source);\n    one.setEvent(\"trace\", undefined);\n    ensure({ source: one.source }).is(500);\n  });\n\n  Error_handlers: {\n\n    it(\"can fill error in coverage report\", async function () {\n      const { one } = loggers;\n      ensure({ Superlogger }).throws(it =\u003e it.create(500)); // id must be a string!\n      ensure({ Superlogger }).throws(it =\u003e { it.create(\"dupl\"); it.create(\"dupl\"); }); // cant create duplicated ids!\n      ensure({ Superlogger }).throws(it =\u003e { it.create(\"whatever\", 500); }); // options must be an object!\n      ensure({ one }).throws(it =\u003e it.setLevel(\"myown\")); // level must exist!\n      ensure({ one }).throws(it =\u003e it.$log(\"unknownLevel\")); // level must exist!\n      ensure({ one }).throws(it =\u003e it.$emit(\"unknownLevel\")); // level must exist!\n      const obj1 = {};\n      obj1.o1 = obj1;\n      const recursiveObject = { o: obj1 };\n      ensure({ one }).doesntThrow(it =\u003e it.log(recursiveObject));\n    });\n\n    it(\"can fill rare cases in coverage report\", async function () {\n      const { one } = loggers;\n      ensure({ one }).doesntThrow(it =\u003e it.log({ o: null }));\n      ensure({ randomString: Superlogger.generateRandomString() }).can(it =\u003e it.length === 5);\n    });\n\n  }\n\n  it(\"can run usage example\", async function () {\n    const logger1 = Superlogger.create(\"angular\");\n    const logger2 = Superlogger.create(\"jquery\");\n    const logger3 = Superlogger.create(\"moment.js\");\n\n    logger1.trace(\"method.id\", \"From trace\");\n    logger1.log(\"From log\");\n    logger1.debug(\"From debug\");\n    logger1.warn(\"From warn\");\n    logger1.error(\"From error\");\n\n    logger1.setBefore(console.log);\n    logger1.setAfter(console.log);\n    logger1.resetCallbacks();\n\n    logger1.setLevel(\"trace\", console.log);\n    logger1.setLevel(\"debug\", console.log);\n    logger1.setLevel(\"log\", console.log);\n    logger1.setLevel(\"warn\", console.log);\n    logger1.setLevel(\"error\", console.log);\n    logger1.resetEvents();\n  });\n\n});\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fsuperlogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallnulled%2Fsuperlogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fsuperlogger/lists"}