{"_id":"@astacinco/rn-logging","name":"@astacinco/rn-logging","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@astacinco/rn-logging","version":"0.1.0","description":"Unified logging for React Native with pluggable adapters","main":"src/index.ts","types":"src/index.ts","repository":{"type":"git","url":"git+https://github.com/jrudydev/rn-toolkit.git","directory":"packages/logging"},"publishConfig":{"access":"public"},"author":{"name":"Spark Labs","email":"hello@sparklabs.dev"},"homepage":"https://github.com/jrudydev/rn-toolkit#readme","scripts":{"build":"tsc","test":"jest","lint":"eslint src --ext .ts,.tsx"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.72.0"},"devDependencies":{"@types/react":"~19.1.0","typescript":"^5.3.3"},"keywords":["react-native","logging","logger","sentry","datadog","observability"],"license":"MIT","_id":"@astacinco/rn-logging@0.1.0","gitHead":"ebaf6560babf6a6b935f53166ba59d28be7f4033","bugs":{"url":"https://github.com/jrudydev/rn-toolkit/issues"},"_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-d4zFxGbw+Hvg6vHiEhdN/0J9RvoiEqcVu4nuw2d1W2uLnP/ObOPsvO+cgsbAHg1NlIG3C7VF/LRI7Jx+oO61LQ==","shasum":"7c9b99af1770537c752900f1dd1d0b75b3b7c382","tarball":"https://registry.npmjs.org/@astacinco/rn-logging/-/rn-logging-0.1.0.tgz","fileCount":10,"unpackedSize":16157,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBLfKQVmQMYKxJVI7YTXpL6m5qX3vySzhQ5k/UWhfcdHAiAyGX8JkBwSrUljSMUrAyqU2iVhV9204sLfGNfqxqbg6Q=="}]},"_npmUser":{"name":"sparklabs343","email":"gomez.rudy@gmail.com"},"directories":{},"maintainers":[{"name":"sparklabs343","email":"gomez.rudy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rn-logging_0.1.0_1773450992571_0.09486332259334262"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-14T01:16:32.446Z","0.1.0":"2026-03-14T01:16:32.725Z","modified":"2026-03-14T01:16:33.321Z"},"maintainers":[{"name":"sparklabs343","email":"gomez.rudy@gmail.com"}],"description":"Unified logging for React Native with pluggable adapters","homepage":"https://github.com/jrudydev/rn-toolkit#readme","keywords":["react-native","logging","logger","sentry","datadog","observability"],"repository":{"type":"git","url":"git+https://github.com/jrudydev/rn-toolkit.git","directory":"packages/logging"},"author":{"name":"Spark Labs","email":"hello@sparklabs.dev"},"bugs":{"url":"https://github.com/jrudydev/rn-toolkit/issues"},"license":"MIT","readme":"# @astacinco/rn-logging\n\nUnified logging for React Native with pluggable adapters.\n\n## Installation\n\n```bash\nnpm install @astacinco/rn-logging\n```\n\n## Quick Start\n\n```tsx\nimport { LogProvider, useLogger, ConsoleAdapter } from '@astacinco/rn-logging';\n\n// Create adapter\nconst adapter = new ConsoleAdapter({\n  prefix: '[MyApp]',\n  minLevel: 'debug',\n});\n\n// Wrap your app\nfunction App() {\n  return (\n    <LogProvider adapter={adapter}>\n      <MyScreen />\n    </LogProvider>\n  );\n}\n\n// Use in components\nfunction MyScreen() {\n  const logger = useLogger('MyScreen');\n\n  useEffect(() => {\n    logger.info('Screen mounted');\n    return () => logger.debug('Screen unmounted');\n  }, []);\n\n  const handleSubmit = async () => {\n    logger.debug('Submitting form', { formId: '123' });\n    try {\n      await submitForm();\n      logger.info('Form submitted successfully');\n    } catch (error) {\n      logger.error('Form submission failed', { error: error.message });\n    }\n  };\n}\n```\n\n## Adapters\n\n### ConsoleAdapter\n\nLogs to console with colors and formatting:\n\n```tsx\nconst adapter = new ConsoleAdapter({\n  prefix: '[App]',      // Prefix for all logs\n  minLevel: 'info',     // Minimum level to log\n  useColors: true,      // Colorized output\n  showTimestamp: true,  // Include timestamps\n  redactFields: ['password', 'token'], // PII protection\n});\n```\n\n### NoOpAdapter\n\nSilently discards all logs:\n\n```tsx\nconst adapter = new NoOpAdapter();\n```\n\n### CompositeAdapter\n\nForward logs to multiple adapters:\n\n```tsx\nconst adapter = new CompositeAdapter({\n  adapters: [\n    new ConsoleAdapter({ prefix: '[Dev]' }),\n    new SentryAdapter({ dsn: '...' }), // (custom adapter)\n  ],\n  // Optional: route specific levels to specific adapters\n  routing: [\n    { adapter: sentryAdapter, levels: ['error', 'warn'] },\n  ],\n});\n```\n\n## Log Levels\n\n| Level | Use Case |\n|-------|----------|\n| `debug` | Verbose debugging info |\n| `info` | General information |\n| `warn` | Warning conditions |\n| `error` | Error conditions |\n\n## API\n\n### LogProvider\n\n```tsx\n<LogProvider\n  adapter={adapter}\n  config={{\n    minLevel: 'info',\n    defaultSource: 'app',\n    enabled: true,\n    redactFields: ['password'],\n  }}\n>\n  {children}\n</LogProvider>\n```\n\n### useLogger\n\n```tsx\nconst logger = useLogger('ComponentName');\n\nlogger.debug('Debug message', { meta: 'data' });\nlogger.info('Info message');\nlogger.warn('Warning message');\nlogger.error('Error message', { error: err.message });\n```\n\n## Creating Custom Adapters\n\nImplement the `LogAdapter` interface:\n\n```tsx\nimport type { LogAdapter, LogLevel } from '@astacinco/rn-logging';\n\nclass MyCustomAdapter implements LogAdapter {\n  name = 'custom';\n\n  log(level: LogLevel, message: string, meta?: Record<string, unknown>): void {\n    // Send to your logging service\n    myService.send({ level, message, ...meta });\n  }\n\n  async flush(): Promise<void> {\n    // Flush any buffered logs\n    await myService.flush();\n  }\n\n  destroy(): void {\n    // Clean up resources\n    myService.disconnect();\n  }\n}\n```\n\n## Integration with Other Packages\n\nOther @astacinco packages can accept an optional logger:\n\n```tsx\n// Future integration\nconst perfAdapter = new PerfAdapter({\n  logger: myLogger, // Performance metrics logged here\n});\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-b5906ee30972a6eb959f9f7d23c475b4"}