{"_id":"@coffic/cosy-logger","_rev":"3-d57f9c10cd790e0ade202214f9a4fc69","name":"@coffic/cosy-logger","dist-tags":{"latest":"0.2.3"},"versions":{"0.1.1":{"name":"@coffic/cosy-logger","version":"0.1.1","_id":"@coffic/cosy-logger@0.1.1","maintainers":[{"name":"nookery","email":"nooks@qq.com"}],"dist":{"shasum":"a21e93ba91bdec29b699a9faa99b6faae97a8eac","tarball":"https://registry.npmjs.org/@coffic/cosy-logger/-/cosy-logger-0.1.1.tgz","fileCount":54,"integrity":"sha512-9ZsT0X/SYIpSvNt0X2agEBXCyjz1E7NoelNSVEzLYl/XqxizHKPJ/otY0LaPW/sC8D6dQN+kAIuWempTC7Wr6A==","signatures":[{"sig":"MEYCIQC3jmM/rLRzubJ1AkVQj1sJ+OlqePpq89Yx1TjlE0lxTgIhAOaft39Z5tOF3oGRwXr2axtXpGjFOOjYwSPMK9MgWWYS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83554},"main":"./dist/index.js","type":"module","_from":"file:coffic-cosy-logger-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"nookery","actor":{"name":"nookery","type":"user","email":"nooks@qq.com"},"email":"nooks@qq.com"},"_resolved":"/tmp/955e9224266d459f9b3cbe2be4aa6bf8/coffic-cosy-logger-0.1.1.tgz","_integrity":"sha512-9ZsT0X/SYIpSvNt0X2agEBXCyjz1E7NoelNSVEzLYl/XqxizHKPJ/otY0LaPW/sC8D6dQN+kAIuWempTC7Wr6A==","_npmVersion":"10.8.2","description":"Cozy Framework 的日志系统","directories":{},"_nodeVersion":"20.19.2","dependencies":{"chalk":"^4.1.2","safe-stable-stringify":"^2.5.0","@coffic/cosy-framework":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/cosy-logger_0.1.1_1751600791929_0.9943163541773794","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@coffic/cosy-logger","version":"0.1.2","_id":"@coffic/cosy-logger@0.1.2","maintainers":[{"name":"nookery","email":"nooks@qq.com"}],"dist":{"shasum":"1f81d77bec75941495824ce396a8f8c941e09b16","tarball":"https://registry.npmjs.org/@coffic/cosy-logger/-/cosy-logger-0.1.2.tgz","fileCount":54,"integrity":"sha512-R5qpy3ooObJYNaC3B2zs5YqQH5g8JiPf5d3piKoMX9Uzril/VBAMTlPPyfqQxsqWWSIZ+D/A5XtsKbrPdk2GfA==","signatures":[{"sig":"MEUCIGK2/M0pqt1IeVIVbRaXcLq7kxDCfEXz0fru6Bg8r4mOAiEA7+SjUYP9JlG7ni2GY6apGaI/XF3YC74RXRtgX1phLyc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82955},"main":"./dist/index.js","type":"module","_from":"file:coffic-cosy-logger-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"nookery","actor":{"name":"nookery","type":"user","email":"nooks@qq.com"},"email":"nooks@qq.com"},"_resolved":"/tmp/f119f1010ea0c201823767a1e1b0e7b7/coffic-cosy-logger-0.1.2.tgz","_integrity":"sha512-R5qpy3ooObJYNaC3B2zs5YqQH5g8JiPf5d3piKoMX9Uzril/VBAMTlPPyfqQxsqWWSIZ+D/A5XtsKbrPdk2GfA==","_npmVersion":"10.8.2","description":"Cozy Framework 的日志系统","directories":{},"_nodeVersion":"20.19.2","dependencies":{"chalk":"^4.1.2","safe-stable-stringify":"^2.5.0","@coffic/cosy-framework":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/cosy-logger_0.1.2_1751602896158_0.7812662818986542","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@coffic/cosy-logger","version":"0.2.3","description":"Cozy Framework 的日志系统","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"chalk":"^4.1.2","safe-stable-stringify":"^2.5.0","@coffic/cosy-framework":"1.0.2"},"devDependencies":{"typescript":"^5.8.3"},"scripts":{"build":"tsc","dev":"tsc --watch"},"_id":"@coffic/cosy-logger@0.2.3","_integrity":"sha512-Uqm0q9tdC6K6HMd6a2pccs2hyl3ciOekaKHQF6yuKqNgiNyOJ5Br5ytd28cQh9xTjXuFLaFvx2Wu+rCX+v7ReA==","_resolved":"/tmp/565a12e7fe5985d7ef8430692e53cf8e/coffic-cosy-logger-0.2.3.tgz","_from":"file:coffic-cosy-logger-0.2.3.tgz","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Uqm0q9tdC6K6HMd6a2pccs2hyl3ciOekaKHQF6yuKqNgiNyOJ5Br5ytd28cQh9xTjXuFLaFvx2Wu+rCX+v7ReA==","shasum":"c09bd79efe8ebe6305b7911b027fb388e80435f6","tarball":"https://registry.npmjs.org/@coffic/cosy-logger/-/cosy-logger-0.2.3.tgz","fileCount":54,"unpackedSize":82955,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC8+plhs36tfssi4dbcQYwak0C//VEQncbjF9LhLBEGCAIhAMy2hIhFqoOAjAy0vGzXzUYnd6sxdzivfBsYxYFHSf9U"}]},"_npmUser":{"name":"nookery","email":"nooks@qq.com","actor":{"name":"nookery","email":"nooks@qq.com","type":"user"}},"directories":{},"maintainers":[{"name":"nookery","email":"nooks@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cosy-logger_0.2.3_1751898517930_0.4147712445521843"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-04T03:46:31.860Z","modified":"2025-07-07T14:28:38.378Z","0.1.1":"2025-07-04T03:46:32.104Z","0.1.2":"2025-07-04T04:21:36.321Z","0.2.3":"2025-07-07T14:28:38.107Z"},"description":"Cozy Framework 的日志系统","maintainers":[{"name":"nookery","email":"nooks@qq.com"}],"readme":"# Cosy Logger\n\nCosy Logger 是一个为 Electron 应用程序设计的灵活且可扩展的日志框架。它的设计灵感来自 Laravel 的日志系统，基于 `electron-log` 构建，通过服务提供者、通道和驱动程序提供结构化的日志管理方式。\n\n## 特性\n\n- **服务提供者集成**：与 `cosy-framework` 服务容器无缝集成\n- **多通道日志**：支持配置多个日志通道（如 `app`、`error`、`plugin`），每个通道可以有不同的设置\n- **基于驱动的架构**：易于扩展自定义日志驱动\n- **文件日志**：在生产环境中将日志持久化到文件系统\n- **控制台日志**：在开发过程中提供彩色格式化的控制台输出\n- **可配置性**：支持通过应用程序配置文件自定义日志行为\n\n## 安装\n\n```bash\npnpm add @coffic/cosy-logger\n```\n\n## 基本使用\n\n```typescript\nimport { Log } from '@coffic/cosy-logger';\n\n// 使用默认通道记录日志\nLog.info('这是一条信息日志');\nLog.error('发生了一个错误', { error: new Error('错误详情') });\n\n// 使用特定通道记录日志\nLog.channel('plugin').info('插件已启动');\nLog.channel('security').warn('检测到可疑活动');\n```\n\n## 配置\n\n### 默认配置\n\nCosy Logger 提供了一套默认配置，包括常用的日志通道和设置。默认配置包括：\n\n```typescript\n{\n  default: 'app',  // 默认通道\n  channels: {\n    app: {\n      driver: 'electron',\n      level: 'info',\n      format: 'structured',\n      includeTimestamp: false\n    },\n    error: {\n      driver: 'electron',\n      level: 'error',\n      format: 'json'\n    },\n    plugin: {\n      driver: 'electron',\n      level: 'info',\n      format: 'structured',\n      includeTimestamp: false\n    }\n    // ... 其他预配置通道\n  }\n}\n```\n\n### 自定义配置\n\n你可以通过应用程序的配置系统自定义日志行为。在你的应用配置文件中添加 `logger` 配置：\n\n```typescript\n// config/logger.ts\nexport default {\n  default: 'app', // 修改默认通道\n  channels: {\n    app: {\n      driver: 'electron',\n      level: 'debug', // 覆盖默认级别\n      format: 'json', // 修改输出格式\n      includeTimestamp: true, // 添加时间戳\n    },\n    customChannel: {\n      // 添加新的通道\n      driver: 'electron',\n      level: 'info',\n      format: 'simple',\n    },\n  },\n};\n```\n\n配置选项说明：\n\n- **default**: 设置默认的日志通道\n- **channels**: 定义日志通道配置\n  - **driver**: 日志驱动类型（目前支持 'electron' 和 'stack'）\n  - **level**: 日志级别（'debug', 'info', 'warn', 'error'）\n  - **format**: 输出格式（'simple', 'structured', 'json'）\n  - **includeTimestamp**: 是否包含时间戳\n  - **channels**: （仅用于 stack 驱动）要组合的通道列表\n\n### 类型支持\n\n为了确保类型安全，我们提供了 `LoggerConfig` 接口：\n\n```typescript\nimport { LoggerConfig } from '@coffic/cosy-logger';\n\nconst config: LoggerConfig = {\n  default: 'app',\n  channels: {\n    // ... 你的通道配置\n  },\n};\n```\n\n## 禁用日志通道\n\n为了方便关闭某个日志通道，用户可以在日志配置文件中将对应通道的 `driver` 值设置为 `null`。当 `driver` 设置为 `null` 时，该日志通道将被禁用，所有与该通道相关的日志调用都不会产生任何输出。\n\n这种方式为在不同环境（例如生产环境）下灵活控制日志记录提供了一种简单直观的手段，而无需修改代码，只需调整配置即可。\n\n## 日志文件位置\n\n在生产环境中，日志不仅会输出到控制台，还会写入到用户系统的文件中。日志文件存储在每个操作系统的标准应用程序日志目录中：\n\n- **macOS**: `~/Library/Logs/{appName}/`\n- **Windows**: `%USERPROFILE%\\AppData\\Roaming\\{appName}\\logs\\`\n- **Linux**: `~/.config/{appName}/logs/`\n\n### 在应用程序中访问日志\n\n你可以使用 Electron 的 `shell` 模块在应用程序中打开日志目录：\n\n```typescript\nimport { app, shell } from 'electron';\n\nconst logsPath = app.getPath('logs');\nshell.openPath(logsPath);\n```\n\n## 高级用法\n\n### 使用 Stack 驱动\n\nStack 驱动允许你将多个日志通道组合在一起：\n\n```typescript\n{\n  channels: {\n    production: {\n      driver: 'stack',\n      channels: ['app', 'error']  // 同时写入到 app 和 error 通道\n    }\n  }\n}\n```\n\n### 添加自定义驱动\n\n你可以通过 `LogManager` 的 `extend` 方法添加自定义驱动：\n\n```typescript\nconst manager = app.make<LogManagerContract>('log.manager');\n\nmanager.extend('custom-file', (config) => {\n  // 返回你的自定义日志通道实现\n  return {\n    log: (level, message, context) => {\n      // 实现你的日志记录逻辑\n    },\n  };\n});\n```\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request 来帮助改进这个项目。","readmeFilename":"README.md"}