{"versions":{"0.0.1-beta.1":{"name":"@agent-infra/logger","description":"An tiny isomorphic logger","version":"0.0.1-beta.1","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"devDependencies":{"@types/node":"20.14.8","typescript":"4.9.4","@rslib/core":"0.5.3"},"scripts":{"dev":"rslib build --watch","build":"rslib build"},"_id":"@agent-infra/logger@0.0.1-beta.1","_integrity":"sha512-c3c0Tke9zjGgMpTC5PC0bBs/ziIG+Snfn8Ulu1QP9xWjGc43JjbD5K6ZIbZFPIkCgctXwfFUyw4mSAB9hS26vw==","_resolved":"/private/var/folders/l5/0qm3ztc10szdj2_h13k2l8800000gn/T/cefec3bdb1ab2c70b8dad10de6c0780e/agent-infra-logger-0.0.1-beta.1.tgz","_from":"file:agent-infra-logger-0.0.1-beta.1.tgz","_nodeVersion":"20.16.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-c3c0Tke9zjGgMpTC5PC0bBs/ziIG+Snfn8Ulu1QP9xWjGc43JjbD5K6ZIbZFPIkCgctXwfFUyw4mSAB9hS26vw==","shasum":"7b73fba13a1d7595d9d555bf8dd4656d9ffb27db","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@agent-infra/logger/-/logger-0.0.1-beta.1.tgz","fileCount":15,"unpackedSize":78581,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDOQicdoBRbab7YeFe5F4UGE8fEtG80xLLGHGpaHnAVhQIgTI/qnLSFmHrO3irSEhwRwYYuZ3yENqI/plvCHird1DQ="}],"size":16236},"_npmUser":{"name":"anonymous","email":"45808948@qq.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"472590061@qq.com"},{"name":"anonymous","email":"45808948@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_0.0.1-beta.1_1743474445843_0.7321580544316604"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-04-01T02:27:26.010Z","publish_time":1743474446010,"_source_registry_name":"default","contributors":[]},"0.0.1":{"name":"@agent-infra/logger","description":"An tiny isomorphic logger","version":"0.0.1","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"devDependencies":{"@types/node":"20.14.8","typescript":"4.9.4","@rslib/core":"0.5.3"},"scripts":{"dev":"rslib build --watch","build":"rslib build"},"_id":"@agent-infra/logger@0.0.1","_integrity":"sha512-0CaqCHJux2RpgqOeiCAmb5kdiVUnpwC52nwapKIYulYckBj1UqaSxF7FV4uYA68c/jk8qEeDHGJssNvtNlLXwQ==","_resolved":"/private/var/folders/l5/0qm3ztc10szdj2_h13k2l8800000gn/T/a667130df56ae574ac1c7ea1592354da/agent-infra-logger-0.0.1.tgz","_from":"file:agent-infra-logger-0.0.1.tgz","_nodeVersion":"20.16.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-0CaqCHJux2RpgqOeiCAmb5kdiVUnpwC52nwapKIYulYckBj1UqaSxF7FV4uYA68c/jk8qEeDHGJssNvtNlLXwQ==","shasum":"a702f2e822921b594c5383b9572bc69133b7548e","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@agent-infra/logger/-/logger-0.0.1.tgz","fileCount":15,"unpackedSize":78574,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3TKPKBJcyN0lTPaTwx6dOD/wzQ3ziY0A/Zp7k1pwc7wIhANGZfxc7+C2g2t/2Xo8IxNCEqS305ZHgtCjK7BuZNKHk"}],"size":16230},"_npmUser":{"name":"anonymous","email":"45808948@qq.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"472590061@qq.com"},{"name":"anonymous","email":"45808948@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_0.0.1_1745307254665_0.0366328891404768"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-04-22T07:34:14.846Z","publish_time":1745307254846,"_source_registry_name":"default","contributors":[]},"0.0.2-beta.1":{"name":"@agent-infra/logger","description":"An tiny isomorphic logger","version":"0.0.2-beta.1","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"devDependencies":{"@types/node":"20.14.8","typescript":"4.9.4","@rslib/core":"0.5.3"},"scripts":{"dev":"rslib build --watch","build":"rslib build"},"_id":"@agent-infra/logger@0.0.2-beta.1","readmeFilename":"README.md","gitHead":"03ed4dbdf0cb75b87bce334cba3245d07e2de1e5","_integrity":"sha512-ni/QuUC7kph1fjL6XTYXWSFA0A3lwTy+Ft/o571zQrnWZU+TSaUtpLzZgZw3VHbqSjBAA7+r1L328sXcq0mvSQ==","_resolved":"/private/var/folders/m4/x5d1p2cn3s987pgtnj0yvyrr0000gn/T/1aa1c3688e77ccf552c77dd323e9b2bb/agent-infra-logger-0.0.2-beta.1.tgz","_from":"file:agent-infra-logger-0.0.2-beta.1.tgz","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ni/QuUC7kph1fjL6XTYXWSFA0A3lwTy+Ft/o571zQrnWZU+TSaUtpLzZgZw3VHbqSjBAA7+r1L328sXcq0mvSQ==","shasum":"0606f7ed325abc6154c4d4522b82bd54825a3b58","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@agent-infra/logger/-/logger-0.0.2-beta.1.tgz","fileCount":15,"unpackedSize":85745,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCyf5D4b0rTNluARSzvDFw7TzKvgVuuMpHRGdlsWWo9vAIhALHJkXhv//GsiZa0oXdJuIncn6nG6mXp5F0sFhUCLDa5"}],"size":16932},"_npmUser":{"name":"anonymous","email":"472590061@qq.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"472590061@qq.com"},{"name":"anonymous","email":"45808948@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_0.0.2-beta.1_1748426756959_0.8512460029341564"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-05-28T10:05:57.148Z","publish_time":1748426757148,"_source_registry_name":"default","contributors":[]},"0.0.2-beta.2":{"name":"@agent-infra/logger","description":"An tiny isomorphic logger","version":"0.0.2-beta.2","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"devDependencies":{"@types/node":"20.14.8","typescript":"4.9.4","@rslib/core":"0.5.3"},"scripts":{"dev":"rslib build --watch","build":"rslib build"},"_id":"@agent-infra/logger@0.0.2-beta.2","readmeFilename":"README.md","gitHead":"03ed4dbdf0cb75b87bce334cba3245d07e2de1e5","_integrity":"sha512-v9r34fl4vUI6jfXSoZc/UldMVYXTCsoHF3JQlx5bxROX13trLr8PcWfS4WYt4GS4wPkgEuCzk6NPJYomN8oCKg==","_resolved":"/private/var/folders/m4/x5d1p2cn3s987pgtnj0yvyrr0000gn/T/3bfab1121d564232559e250dfbcab318/agent-infra-logger-0.0.2-beta.2.tgz","_from":"file:agent-infra-logger-0.0.2-beta.2.tgz","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-v9r34fl4vUI6jfXSoZc/UldMVYXTCsoHF3JQlx5bxROX13trLr8PcWfS4WYt4GS4wPkgEuCzk6NPJYomN8oCKg==","shasum":"51dfc670d0f91f82cdec391c5b1271eced0fe27f","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@agent-infra/logger/-/logger-0.0.2-beta.2.tgz","fileCount":15,"unpackedSize":85745,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCmhRO9xts0ycf1HnAzrFwQHwCMT50+m6GkjDQ0ZxtfHwIhAODiS652oQZihP6FnaVeOZN5dQhX8dTUIoa4jmSEOSZ4"}],"size":16932},"_npmUser":{"name":"anonymous","email":"472590061@qq.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"472590061@qq.com"},{"name":"anonymous","email":"45808948@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_0.0.2-beta.2_1748427927890_0.6161928312169203"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-05-28T10:25:28.068Z","publish_time":1748427928068,"_source_registry_name":"default","contributors":[]}},"dist-tags":{"beta":"0.0.2-beta.2","latest":"0.0.1"},"name":"@agent-infra/logger","time":{"created":"2025-03-28T03:45:14.153Z","modified":"2025-11-28T08:58:09.295Z","0.0.1-beta.1":"2025-04-01T02:27:26.010Z","0.0.1":"2025-04-22T07:34:14.846Z","0.0.2-beta.1":"2025-05-28T10:05:57.148Z","0.0.2-beta.2":"2025-05-28T10:25:28.068Z"},"readme":"# @agent-infra/logger\n\n<p>\n  <a href=\"https://npmjs.com/package/@agent-infra/logger?activeTab=readme\"><img src=\"https://img.shields.io/npm/v/@agent-infra/logger?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"npm version\" /></a>\n  <a href=\"https://npmcharts.com/compare/@agent-infra/logger?minimal=true\"><img src=\"https://img.shields.io/npm/dm/@agent-infra/logger.svg?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"downloads\" /></a>\n  <a href=\"https://nodejs.org/en/about/previous-releases\"><img src=\"https://img.shields.io/node/v/@agent-infra/logger.svg?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"node version\"></a>\n  <a href=\"https://github.com/bytedance/UI-TARS-desktop/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"license\" /></a>\n</p>\n\nA tiny, powerful isomorphic logger for both Node.js and browser environments. built for **Agent Tars**.\n\n| Browser                                 | Node.js                           |\n| --------------------------------------- | --------------------------------- |\n| ![Browser Example](./media/browser.png) | ![Node Example](./media/node.png) |\n\n## Features\n\n- **Isomorphic**: Works seamlessly in both Node.js and browser environments\n- **Colorful Output**: Automatic color support for different platforms\n- **Hierarchical Logging**: Create nested loggers with prefixes\n- **Data Handling**: Log structured data with optional transformation\n- **Zero Dependencies**: Lightweight with no external runtime dependencies\n- **TypeScript Support**: Full type definitions included\n- **Log Levels**: Fine-grained control over logging verbosity\n\n## Installation\n\n```bash\nnpm install @agent-infra/logger\n# or\nyarn add @agent-infra/logger\n# or\npnpm add @agent-infra/logger\n```\n\n## Quick Start\n\n```typescript\nimport { ConsoleLogger } from '@agent-infra/logger';\n\n// Create a logger with a prefix\nconst logger = new ConsoleLogger('[App]');\n\n// Basic logging\nlogger.info('Server started');\nlogger.warn('Resource usage high');\nlogger.error('Database connection failed');\nlogger.success('Task completed successfully');\n\n// Log with structured data\nlogger.infoWithData(\n  'User data:',\n  { id: 1, name: 'John', email: 'john@example.com' },\n  // Optional transformer to mask sensitive data\n  (user) => ({ ...user, email: '***@example.com' }),\n);\n\n// Create a child logger for a specific component\nconst dbLogger = logger.spawn('Database');\ndbLogger.info('Connected to database'); // Outputs: [App:Database] Connected to database\n```\n\n## API Reference\n\n### Logger\n\nMain logger type.\n\n| Method                                                                        | Description                                               |\n| ----------------------------------------------------------------------------- | --------------------------------------------------------- |\n| `log(...args: any[])`                                                         | Basic logging, similar to console.log                     |\n| `info(message: string)`                                                       | Log informational message (blue prefix)                   |\n| `warn(message: string)`                                                       | Log warning message (yellow prefix)                       |\n| `error(message: string)`                                                      | Log error message (red prefix)                            |\n| `success(message: string)`                                                    | Log success message (green prefix)                        |\n| `infoWithData<T>(message: string, data?: T, transformer?: (value: T) => any)` | Log message with associated data and optional transformer |\n| `spawn(prefix: string)`                                                       | Create a new logger instance with additional prefix       |\n| `setLevel(level: LogLevel)`                                                   | Set the current log level                                 |\n| `getLevel()`                                                                  | Get the current log level                                 |\n\n### LogLevel\n\nControls the verbosity of logging output.\n\n```typescript\nenum LogLevel {\n  DEBUG = 0,   // Most verbose, includes all logs\n  INFO = 1,    // Standard information messages\n  SUCCESS = 2, // Success messages and operations\n  WARN = 3,    // Warning messages\n  ERROR = 4,   // Error messages\n  SILENT = 5   // No logs will be displayed\n}\n```\n\n### defaultLogger\n\nThe empty logger that implements the Logger interface but does nothing.\n\n### ConsoleLogger\n\nThe main logger implementation with colored console output.\n\n## Usage\n\n### Log Levels\n\nControl verbosity with log levels:\n\n```ts\nimport { ConsoleLogger, LogLevel } from '@agent-infra/logger';\n\nconst logger = new ConsoleLogger('[App]');\n\n// Set log level\nlogger.setLevel(LogLevel.WARN); // Only WARN and ERROR will be shown\n\n// These won't be displayed\nlogger.debug('Debug message');\nlogger.info('Info message');\nlogger.success('Success message');\n\n// These will be displayed\nlogger.warn('Warning message');\nlogger.error('Error message');\n\n// Get current log level\nconst currentLevel = logger.getLevel(); // Returns LogLevel.WARN\n```\n\n### Data Logging with Transformation\n\nThe `infoWithData` method allows logging structured data with optional transformation:\n\n```typescript\n// Log data with optional transformation\nlogger.infoWithData(\n  'User profile:',\n  { id: 123, name: 'Alice', email: 'alice@example.com', password: 'secret123' },\n  // Optional transformer to mask sensitive data\n  (data) => ({ ...data, password: '********' }),\n);\n```\n\n### Hierarchical Loggers\n\nCreate nested loggers with the `spawn` method for better organization:\n\n```ts\n// Create parent logger\nconst appLogger = new ConsoleLogger('[App]');\n\n// Create child loggers for different components\nconst authLogger = appLogger.spawn('Auth');\nconst dbLogger = appLogger.spawn('Database');\nconst apiLogger = appLogger.spawn('API');\n\n// Usage\nauthLogger.info('User authenticated'); // Outputs: [App:Auth] User authenticated\ndbLogger.error('Connection failed'); // Outputs: [App:Database] Connection failed\napiLogger.warn('Rate limit reached'); // Outputs: [App:API] Rate limit reached\n```\n\n### Advanced Usage\n\n#### Environment-Specific Configuration\n\nConfigure different log levels based on environment:\n\n```typescript\nimport { ConsoleLogger, LogLevel } from '@agent-infra/logger';\n\n// Create base logger\nconst logger = new ConsoleLogger('[App]');\n\n// Configure based on environment\nif (process.env.NODE_ENV === 'production') {\n  logger.setLevel(LogLevel.WARN); // Only show warnings and errors in production\n} else if (process.env.NODE_ENV === 'test') {\n  logger.setLevel(LogLevel.ERROR); // Only show errors in test\n} else {\n  logger.setLevel(LogLevel.DEBUG); // Show all logs in development\n}\n```\n\n#### Integration with Error Tracking\n\nCombine with error tracking services:\n\n```typescript\nimport { ConsoleLogger } from '@agent-infra/logger';\nimport * as Sentry from '@sentry/browser'; // Example error tracking\n\nconst logger = new ConsoleLogger('[App]');\n\n// Override error method to also report to Sentry\nconst originalError = logger.error;\nlogger.error = function(...args) {\n  // Call original implementation\n  originalError.apply(this, args);\n  \n  // Report to error tracking\n  if (args[0] && typeof args[0] === 'string') {\n    Sentry.captureMessage(args[0], Sentry.Severity.Error);\n  }\n};\n```\n\n#### Custom Color Themes\n\nYou can modify the CSS_COLOR_VALUES in your application to customize colors:\n\n```typescript\nimport { ConsoleLogger, CSS_COLOR_VALUES } from '@agent-infra/logger';\n\n// Override default colors with your theme\nObject.assign(CSS_COLOR_VALUES, {\n  blue: '#3498db',\n  green: '#2ecc71',\n  red: '#e74c3c',\n  yellow: '#f39c12'\n});\n\nconst logger = new ConsoleLogger('[MyApp]');\n```\n\n## Best Practices\n\n### Organizing Loggers\n\nFor larger applications, organize loggers by feature or module:\n\n```typescript\n// logger.ts\nimport { ConsoleLogger, LogLevel } from '@agent-infra/logger';\n\n// Create root logger\nconst rootLogger = new ConsoleLogger('[MyApp]');\n\n// Set level based on environment\nrootLogger.setLevel(\n  process.env.NODE_ENV === 'production' ? LogLevel.WARN : LogLevel.INFO\n);\n\n// Create and export feature-specific loggers\nexport const authLogger = rootLogger.spawn('Auth');\nexport const apiLogger = rootLogger.spawn('API');\nexport const dbLogger = rootLogger.spawn('DB');\nexport const uiLogger = rootLogger.spawn('UI');\n```\n\n### Consistent Log Formats\n\nFor machine-parseable logs, use consistent formats:\n\n```typescript\nimport { ConsoleLogger } from '@agent-infra/logger';\n\nconst logger = new ConsoleLogger('[API]');\n\n// Log structured events consistently\nfunction logApiEvent(eventType, data) {\n  const event = {\n    timestamp: new Date().toISOString(),\n    type: eventType,\n    ...data\n  };\n  \n  logger.infoWithData(`API ${eventType}`, event);\n}\n\n// Usage\nlogApiEvent('request', { \n  method: 'GET', \n  path: '/users', \n  duration: 120 \n});\n```\n\n## License\n\nCopyright (c) 2025 ByteDance, Inc. and its affiliates.\n\nLicensed under the Apache License, Version 2.0.","users":{}}