{"id":13727966,"url":"https://github.com/logtown/logtown","last_synced_at":"2026-04-06T11:02:58.497Z","repository":{"id":57142692,"uuid":"72877148","full_name":"logtown/logtown","owner":"logtown","description":"🦄 Simple Logging Facade for JavaScript","archived":false,"fork":false,"pushed_at":"2026-03-16T11:42:04.000Z","size":1370,"stargazers_count":32,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-17T00:12:07.883Z","etag":null,"topics":["javascript","logging","logging-facade","logtown"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logtown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"zemd"}},"created_at":"2016-11-04T19:02:32.000Z","updated_at":"2026-03-16T11:42:07.000Z","dependencies_parsed_at":"2026-01-12T19:02:12.532Z","dependency_job_id":null,"html_url":"https://github.com/logtown/logtown","commit_stats":{"total_commits":124,"total_committers":5,"mean_commits":24.8,"dds":0.4516129032258065,"last_synced_commit":"0a6fe05917c7168ad76ca852ee7941786cd143cd"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/logtown/logtown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logtown%2Flogtown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logtown%2Flogtown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logtown%2Flogtown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logtown%2Flogtown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logtown","download_url":"https://codeload.github.com/logtown/logtown/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logtown%2Flogtown/sbom","scorecard":{"id":597466,"data":{"date":"2025-08-11","repo":{"name":"github.com/logtown/logtown","commit":"64ed69b35050a08d28331d4a92c6620918345dc9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"19 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/1 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:4","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/ci.yml:5","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:5","Warn: topLevel 'packages' permission set to 'write': .github/workflows/release.yml:6","Info: topLevel 'issues' permission set to 'read': .github/workflows/release.yml:8","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/logtown/logtown/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/logtown/logtown/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/logtown/logtown/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/logtown/logtown/release.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   3 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (29) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T23:30:31.397Z","repository_id":57142692,"created_at":"2025-08-20T23:30:31.397Z","updated_at":"2025-08-20T23:30:31.397Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31469744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-facade","logtown"],"created_at":"2024-08-03T02:00:35.585Z","updated_at":"2026-04-06T11:02:58.492Z","avatar_url":"https://github.com/logtown.png","language":"TypeScript","funding_links":["https://github.com/sponsors/zemd"],"categories":["Packages"],"sub_categories":["Logging"],"readme":"# Logtown\n\n[![npm](https://img.shields.io/npm/v/logtown?color=0000ff\u0026label=npm\u0026labelColor=000)](https://npmjs.com/package/logtown)\n\nLightweight logging wrapper with only one dependency. Logtown is not a logger and does not depend on any loggers.\n\nThe reasoning behind this package is to provide a simple and easy-to-use logging interface that can be used with any logger within any environment.\n\nNowadays, application can be run in many different environments, such as Cloudflare Workers, Deno, AWS Lambda, Node.js, Bun.js, Browsers and many others. Each of these environments has its own logging capabilities and requirements. **Logtown** is designed to be a single logging interface that can be used in any of these environments.\n\nFor example, for local development you can enable console logging that would include colors, while in production you would use a logger that sends logs to a remote server, such as AWS CloudWatch, and/or you can configure it to send logs in a specific format, like JSON.\n\n## Log levels\n\nLogtown supports the following log levels:\n\n- `verbose`\n- `debug`\n- `info`\n- `warn`\n- `error`\n\nNo other log levels are supported and never will be. The decision to keep the number of log levels to a minimum and never change them, so that the code that uses Logtown will be more predictable and easier to maintain.\n\n## Installation\n\n```bash\nnpm install logtown\npnpm add logtown\nbun add logtown\n```\n\n## Usage\n\n```typescript\nimport { createLogger, registerWrapper, ConsoleWrapper, GCPSimpleWrapper } from \"logtown\";\n\nconst logger = new createLogger(\"my-logger\");\nlogger.info(\"Hello World\");\n// ^ nothing happens, because no wrappers were added\n\nregisterWrapper(ConsoleWrapper);\nlogger.info(\"Hello %s\", \"World\");\n// ^ prints \"Hello World\" to the console\n\nif (process.env.IS_GSP === \"true\") {\n  registerWrapper(new GCPSimpleWrapper());\n}\nlogger.info(\"This will be logged in GCP as a LogEntry, so that filtering can be done in GCP Logs Explorer\");\n```\n\n## Wrappers\n\nWrappers are the actual loggers that will be used to log messages. You should create your own wrapper. The wrapper can be either a function or an object that has a `log` method(that would be called for all log levels) or any of log level methods.\n\n```typescript\nimport { createLogger, registerWrapper, type LoggerPayload } from \"logtown\";\n\n// the following wrapper will log all messages to the console\nregisterWrapper({\n  log: ({ level, message }: LoggerPayload) =\u003e {\n    console.log(`[${level}] ${message}`);\n  },\n});\n```\n\n```typescript\nimport { createLogger, registerWrapper, type LoggerPayload } from \"logtown\";\nimport debug from \"debug\";\n\nif (process.env.NODE_ENV === \"development\") {\n  // the following wrapper will log debug messages only to the debug logger\n  registerWrapper({\n    debug: ({ level, timestamp, id, message, ...rest }: LoggerPayload) =\u003e {\n      const debugLog = debug(id);\n      debugLog(message, ...rest);\n    },\n  });\n}\n```\n\n## License\n\n`logtown` released under the Apache 2.0 license\n\n## Donate\n\n[![](https://img.shields.io/static/v1?label=UNITED24\u0026message=support%20Ukraine\u0026color=blue)](https://u24.gov.ua/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogtown%2Flogtown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogtown%2Flogtown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogtown%2Flogtown/lists"}