@vibesdotdev/logging 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/README.md +80 -0
  2. package/SPEC.md +65 -0
  3. package/dist/audit/audit.descriptor.d.ts +11 -0
  4. package/dist/audit/audit.descriptor.d.ts.map +1 -0
  5. package/dist/audit/audit.descriptor.js +40 -0
  6. package/dist/audit/audit.descriptor.js.map +1 -0
  7. package/dist/audit/audit.storage.schema.d.ts +79 -0
  8. package/dist/audit/audit.storage.schema.d.ts.map +1 -0
  9. package/dist/audit/audit.storage.schema.js +33 -0
  10. package/dist/audit/audit.storage.schema.js.map +1 -0
  11. package/dist/audit/index.d.ts +2 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit/index.js +2 -0
  14. package/dist/audit/index.js.map +1 -0
  15. package/dist/cli/logs.descriptor.d.ts +9 -0
  16. package/dist/cli/logs.descriptor.d.ts.map +1 -0
  17. package/dist/cli/logs.descriptor.js +16 -0
  18. package/dist/cli/logs.descriptor.js.map +1 -0
  19. package/dist/cli/logs.list.descriptor.d.ts +9 -0
  20. package/dist/cli/logs.list.descriptor.d.ts.map +1 -0
  21. package/dist/cli/logs.list.descriptor.js +23 -0
  22. package/dist/cli/logs.list.descriptor.js.map +1 -0
  23. package/dist/cli/logs.list.impl.d.ts +13 -0
  24. package/dist/cli/logs.list.impl.d.ts.map +1 -0
  25. package/dist/cli/logs.list.impl.js +81 -0
  26. package/dist/cli/logs.list.impl.js.map +1 -0
  27. package/dist/cli/logs.rotate.descriptor.d.ts +9 -0
  28. package/dist/cli/logs.rotate.descriptor.d.ts.map +1 -0
  29. package/dist/cli/logs.rotate.descriptor.js +34 -0
  30. package/dist/cli/logs.rotate.descriptor.js.map +1 -0
  31. package/dist/cli/logs.rotate.impl.d.ts +17 -0
  32. package/dist/cli/logs.rotate.impl.d.ts.map +1 -0
  33. package/dist/cli/logs.rotate.impl.js +48 -0
  34. package/dist/cli/logs.rotate.impl.js.map +1 -0
  35. package/dist/cli/logs.search.descriptor.d.ts +9 -0
  36. package/dist/cli/logs.search.descriptor.d.ts.map +1 -0
  37. package/dist/cli/logs.search.descriptor.js +55 -0
  38. package/dist/cli/logs.search.descriptor.js.map +1 -0
  39. package/dist/cli/logs.search.impl.d.ts +22 -0
  40. package/dist/cli/logs.search.impl.d.ts.map +1 -0
  41. package/dist/cli/logs.search.impl.js +145 -0
  42. package/dist/cli/logs.search.impl.js.map +1 -0
  43. package/dist/cli/logs.tail.descriptor.d.ts +9 -0
  44. package/dist/cli/logs.tail.descriptor.d.ts.map +1 -0
  45. package/dist/cli/logs.tail.descriptor.js +43 -0
  46. package/dist/cli/logs.tail.descriptor.js.map +1 -0
  47. package/dist/cli/logs.tail.impl.d.ts +19 -0
  48. package/dist/cli/logs.tail.impl.d.ts.map +1 -0
  49. package/dist/cli/logs.tail.impl.js +78 -0
  50. package/dist/cli/logs.tail.impl.js.map +1 -0
  51. package/dist/cli/logs.view.descriptor.d.ts +9 -0
  52. package/dist/cli/logs.view.descriptor.d.ts.map +1 -0
  53. package/dist/cli/logs.view.descriptor.js +51 -0
  54. package/dist/cli/logs.view.descriptor.js.map +1 -0
  55. package/dist/cli/logs.view.impl.d.ts +21 -0
  56. package/dist/cli/logs.view.impl.d.ts.map +1 -0
  57. package/dist/cli/logs.view.impl.js +85 -0
  58. package/dist/cli/logs.view.impl.js.map +1 -0
  59. package/dist/cli/types.d.ts +57 -0
  60. package/dist/cli/types.d.ts.map +1 -0
  61. package/dist/cli/types.js +9 -0
  62. package/dist/cli/types.js.map +1 -0
  63. package/dist/contexts/audit.d.ts +34 -0
  64. package/dist/contexts/audit.d.ts.map +1 -0
  65. package/dist/contexts/audit.js +13 -0
  66. package/dist/contexts/audit.js.map +1 -0
  67. package/dist/contexts/fallback-logger.d.ts +3 -0
  68. package/dist/contexts/fallback-logger.d.ts.map +1 -0
  69. package/dist/contexts/fallback-logger.js +67 -0
  70. package/dist/contexts/fallback-logger.js.map +1 -0
  71. package/dist/contexts/index.d.ts +8 -0
  72. package/dist/contexts/index.d.ts.map +1 -0
  73. package/dist/contexts/index.js +9 -0
  74. package/dist/contexts/index.js.map +1 -0
  75. package/dist/contexts/logger.d.ts +26 -0
  76. package/dist/contexts/logger.d.ts.map +1 -0
  77. package/dist/contexts/logger.js +88 -0
  78. package/dist/contexts/logger.js.map +1 -0
  79. package/dist/core/index.d.ts +9 -0
  80. package/dist/core/index.d.ts.map +1 -0
  81. package/dist/core/index.js +10 -0
  82. package/dist/core/index.js.map +1 -0
  83. package/dist/core/logger.d.ts +3 -0
  84. package/dist/core/logger.d.ts.map +1 -0
  85. package/dist/core/logger.js +118 -0
  86. package/dist/core/logger.js.map +1 -0
  87. package/dist/core/namespace.d.ts +69 -0
  88. package/dist/core/namespace.d.ts.map +1 -0
  89. package/dist/core/namespace.js +136 -0
  90. package/dist/core/namespace.js.map +1 -0
  91. package/dist/core/parsing.d.ts +3 -0
  92. package/dist/core/parsing.d.ts.map +1 -0
  93. package/dist/core/parsing.js +25 -0
  94. package/dist/core/parsing.js.map +1 -0
  95. package/dist/core/types.d.ts +69 -0
  96. package/dist/core/types.d.ts.map +1 -0
  97. package/dist/core/types.js +7 -0
  98. package/dist/core/types.js.map +1 -0
  99. package/dist/docs/levels.docs.descriptor.d.ts +4 -0
  100. package/dist/docs/levels.docs.descriptor.d.ts.map +1 -0
  101. package/dist/docs/levels.docs.descriptor.js +342 -0
  102. package/dist/docs/levels.docs.descriptor.js.map +1 -0
  103. package/dist/docs/structured.docs.descriptor.d.ts +4 -0
  104. package/dist/docs/structured.docs.descriptor.d.ts.map +1 -0
  105. package/dist/docs/structured.docs.descriptor.js +442 -0
  106. package/dist/docs/structured.docs.descriptor.js.map +1 -0
  107. package/dist/docs/transports.docs.descriptor.d.ts +4 -0
  108. package/dist/docs/transports.docs.descriptor.d.ts.map +1 -0
  109. package/dist/docs/transports.docs.descriptor.js +426 -0
  110. package/dist/docs/transports.docs.descriptor.js.map +1 -0
  111. package/dist/formatters/index.d.ts +7 -0
  112. package/dist/formatters/index.d.ts.map +1 -0
  113. package/dist/formatters/index.js +8 -0
  114. package/dist/formatters/index.js.map +1 -0
  115. package/dist/formatters/json/json.formatters.descriptor.d.ts +9 -0
  116. package/dist/formatters/json/json.formatters.descriptor.d.ts.map +1 -0
  117. package/dist/formatters/json/json.formatters.descriptor.js +22 -0
  118. package/dist/formatters/json/json.formatters.descriptor.js.map +1 -0
  119. package/dist/formatters/json/json.impl.d.ts +22 -0
  120. package/dist/formatters/json/json.impl.d.ts.map +1 -0
  121. package/dist/formatters/json/json.impl.js +32 -0
  122. package/dist/formatters/json/json.impl.js.map +1 -0
  123. package/dist/formatters/json5/json5.descriptor.d.ts +9 -0
  124. package/dist/formatters/json5/json5.descriptor.d.ts.map +1 -0
  125. package/dist/formatters/json5/json5.descriptor.js +22 -0
  126. package/dist/formatters/json5/json5.descriptor.js.map +1 -0
  127. package/dist/formatters/json5/json5.impl.d.ts +23 -0
  128. package/dist/formatters/json5/json5.impl.d.ts.map +1 -0
  129. package/dist/formatters/json5/json5.impl.js +34 -0
  130. package/dist/formatters/json5/json5.impl.js.map +1 -0
  131. package/dist/formatters/jsonl/jsonl.descriptor.d.ts +10 -0
  132. package/dist/formatters/jsonl/jsonl.descriptor.d.ts.map +1 -0
  133. package/dist/formatters/jsonl/jsonl.descriptor.js +23 -0
  134. package/dist/formatters/jsonl/jsonl.descriptor.js.map +1 -0
  135. package/dist/formatters/jsonl/jsonl.impl.d.ts +21 -0
  136. package/dist/formatters/jsonl/jsonl.impl.d.ts.map +1 -0
  137. package/dist/formatters/jsonl/jsonl.impl.js +30 -0
  138. package/dist/formatters/jsonl/jsonl.impl.js.map +1 -0
  139. package/dist/formatters/pretty/pretty.descriptor.d.ts +9 -0
  140. package/dist/formatters/pretty/pretty.descriptor.d.ts.map +1 -0
  141. package/dist/formatters/pretty/pretty.descriptor.js +23 -0
  142. package/dist/formatters/pretty/pretty.descriptor.js.map +1 -0
  143. package/dist/formatters/pretty/pretty.impl.cli.d.ts +23 -0
  144. package/dist/formatters/pretty/pretty.impl.cli.d.ts.map +1 -0
  145. package/dist/formatters/pretty/pretty.impl.cli.js +81 -0
  146. package/dist/formatters/pretty/pretty.impl.cli.js.map +1 -0
  147. package/dist/index.d.ts +67 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +97 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/kinds/audit.d.ts +85 -0
  152. package/dist/kinds/audit.d.ts.map +1 -0
  153. package/dist/kinds/audit.js +71 -0
  154. package/dist/kinds/audit.js.map +1 -0
  155. package/dist/kinds/contexts.d.ts +21 -0
  156. package/dist/kinds/contexts.d.ts.map +1 -0
  157. package/dist/kinds/contexts.js +8 -0
  158. package/dist/kinds/contexts.js.map +1 -0
  159. package/dist/kinds/formatter.d.ts +42 -0
  160. package/dist/kinds/formatter.d.ts.map +1 -0
  161. package/dist/kinds/formatter.js +69 -0
  162. package/dist/kinds/formatter.js.map +1 -0
  163. package/dist/kinds/index.d.ts +13 -0
  164. package/dist/kinds/index.d.ts.map +1 -0
  165. package/dist/kinds/index.js +13 -0
  166. package/dist/kinds/index.js.map +1 -0
  167. package/dist/kinds/logger.contracts.d.ts +16 -0
  168. package/dist/kinds/logger.contracts.d.ts.map +1 -0
  169. package/dist/kinds/logger.contracts.js +9 -0
  170. package/dist/kinds/logger.contracts.js.map +1 -0
  171. package/dist/kinds/logger.d.ts +15 -0
  172. package/dist/kinds/logger.d.ts.map +1 -0
  173. package/dist/kinds/logger.impl.d.ts +40 -0
  174. package/dist/kinds/logger.impl.d.ts.map +1 -0
  175. package/dist/kinds/logger.impl.js +139 -0
  176. package/dist/kinds/logger.impl.js.map +1 -0
  177. package/dist/kinds/logger.js +28 -0
  178. package/dist/kinds/logger.js.map +1 -0
  179. package/dist/kinds/logger.utils.d.ts +15 -0
  180. package/dist/kinds/logger.utils.d.ts.map +1 -0
  181. package/dist/kinds/logger.utils.js +55 -0
  182. package/dist/kinds/logger.utils.js.map +1 -0
  183. package/dist/kinds/output.contracts.d.ts +50 -0
  184. package/dist/kinds/output.contracts.d.ts.map +1 -0
  185. package/dist/kinds/output.contracts.js +10 -0
  186. package/dist/kinds/output.contracts.js.map +1 -0
  187. package/dist/kinds/output.d.ts +20 -0
  188. package/dist/kinds/output.d.ts.map +1 -0
  189. package/dist/kinds/output.impl.d.ts +22 -0
  190. package/dist/kinds/output.impl.d.ts.map +1 -0
  191. package/dist/kinds/output.impl.js +84 -0
  192. package/dist/kinds/output.impl.js.map +1 -0
  193. package/dist/kinds/output.js +29 -0
  194. package/dist/kinds/output.js.map +1 -0
  195. package/dist/kinds/output.types.d.ts +92 -0
  196. package/dist/kinds/output.types.d.ts.map +1 -0
  197. package/dist/kinds/output.types.js +7 -0
  198. package/dist/kinds/output.types.js.map +1 -0
  199. package/dist/kinds/sink.d.ts +40 -0
  200. package/dist/kinds/sink.d.ts.map +1 -0
  201. package/dist/kinds/sink.js +61 -0
  202. package/dist/kinds/sink.js.map +1 -0
  203. package/dist/logger.context.descriptor.d.ts +21 -0
  204. package/dist/logger.context.descriptor.d.ts.map +1 -0
  205. package/dist/logger.context.descriptor.js +12 -0
  206. package/dist/logger.context.descriptor.js.map +1 -0
  207. package/dist/logging.cli.plugin.d.ts +20 -0
  208. package/dist/logging.cli.plugin.d.ts.map +1 -0
  209. package/dist/logging.cli.plugin.js +39 -0
  210. package/dist/logging.cli.plugin.js.map +1 -0
  211. package/dist/logging.plugin.d.ts +16 -0
  212. package/dist/logging.plugin.d.ts.map +1 -0
  213. package/dist/logging.plugin.js +83 -0
  214. package/dist/logging.plugin.js.map +1 -0
  215. package/dist/outputs/index.d.ts +7 -0
  216. package/dist/outputs/index.d.ts.map +1 -0
  217. package/dist/outputs/index.js +8 -0
  218. package/dist/outputs/index.js.map +1 -0
  219. package/dist/outputs/remote/remote.descriptor.d.ts +10 -0
  220. package/dist/outputs/remote/remote.descriptor.d.ts.map +1 -0
  221. package/dist/outputs/remote/remote.descriptor.js +24 -0
  222. package/dist/outputs/remote/remote.descriptor.js.map +1 -0
  223. package/dist/outputs/remote/remote.impl.d.ts +50 -0
  224. package/dist/outputs/remote/remote.impl.d.ts.map +1 -0
  225. package/dist/outputs/remote/remote.impl.js +178 -0
  226. package/dist/outputs/remote/remote.impl.js.map +1 -0
  227. package/dist/outputs.context.descriptor.d.ts +19 -0
  228. package/dist/outputs.context.descriptor.d.ts.map +1 -0
  229. package/dist/outputs.context.descriptor.js +9 -0
  230. package/dist/outputs.context.descriptor.js.map +1 -0
  231. package/dist/outputs.context.impl.d.ts +9 -0
  232. package/dist/outputs.context.impl.d.ts.map +1 -0
  233. package/dist/outputs.context.impl.js +18 -0
  234. package/dist/outputs.context.impl.js.map +1 -0
  235. package/dist/paths.d.ts +8 -0
  236. package/dist/paths.d.ts.map +1 -0
  237. package/dist/paths.js +10 -0
  238. package/dist/paths.js.map +1 -0
  239. package/dist/schemas/audit.d.ts +133 -0
  240. package/dist/schemas/audit.d.ts.map +1 -0
  241. package/dist/schemas/audit.js +80 -0
  242. package/dist/schemas/audit.js.map +1 -0
  243. package/dist/schemas/entry.d.ts +74 -0
  244. package/dist/schemas/entry.d.ts.map +1 -0
  245. package/dist/schemas/entry.js +62 -0
  246. package/dist/schemas/entry.js.map +1 -0
  247. package/dist/schemas/formatter.d.ts +46 -0
  248. package/dist/schemas/formatter.d.ts.map +1 -0
  249. package/dist/schemas/formatter.js +31 -0
  250. package/dist/schemas/formatter.js.map +1 -0
  251. package/dist/schemas/index.d.ts +12 -0
  252. package/dist/schemas/index.d.ts.map +1 -0
  253. package/dist/schemas/index.js +18 -0
  254. package/dist/schemas/index.js.map +1 -0
  255. package/dist/schemas/logger.d.ts +48 -0
  256. package/dist/schemas/logger.d.ts.map +1 -0
  257. package/dist/schemas/logger.js +27 -0
  258. package/dist/schemas/logger.js.map +1 -0
  259. package/dist/schemas/output.d.ts +68 -0
  260. package/dist/schemas/output.d.ts.map +1 -0
  261. package/dist/schemas/output.js +48 -0
  262. package/dist/schemas/output.js.map +1 -0
  263. package/dist/schemas/sink.d.ts +52 -0
  264. package/dist/schemas/sink.d.ts.map +1 -0
  265. package/dist/schemas/sink.js +30 -0
  266. package/dist/schemas/sink.js.map +1 -0
  267. package/dist/sinks/buffer/buffer.descriptor.d.ts +4 -0
  268. package/dist/sinks/buffer/buffer.descriptor.d.ts.map +1 -0
  269. package/dist/sinks/buffer/buffer.descriptor.js +11 -0
  270. package/dist/sinks/buffer/buffer.descriptor.js.map +1 -0
  271. package/dist/sinks/buffer/buffer.impl.cli.d.ts +21 -0
  272. package/dist/sinks/buffer/buffer.impl.cli.d.ts.map +1 -0
  273. package/dist/sinks/buffer/buffer.impl.cli.js +34 -0
  274. package/dist/sinks/buffer/buffer.impl.cli.js.map +1 -0
  275. package/dist/sinks/console/console.descriptor.d.ts +10 -0
  276. package/dist/sinks/console/console.descriptor.d.ts.map +1 -0
  277. package/dist/sinks/console/console.descriptor.js +17 -0
  278. package/dist/sinks/console/console.descriptor.js.map +1 -0
  279. package/dist/sinks/console/console.impl.browser.d.ts +21 -0
  280. package/dist/sinks/console/console.impl.browser.d.ts.map +1 -0
  281. package/dist/sinks/console/console.impl.browser.js +57 -0
  282. package/dist/sinks/console/console.impl.browser.js.map +1 -0
  283. package/dist/sinks/console/console.impl.cli.d.ts +21 -0
  284. package/dist/sinks/console/console.impl.cli.d.ts.map +1 -0
  285. package/dist/sinks/console/console.impl.cli.js +57 -0
  286. package/dist/sinks/console/console.impl.cli.js.map +1 -0
  287. package/dist/sinks/index.d.ts +8 -0
  288. package/dist/sinks/index.d.ts.map +1 -0
  289. package/dist/sinks/index.js +8 -0
  290. package/dist/sinks/index.js.map +1 -0
  291. package/dist/sinks/memory/memory.descriptor.d.ts +10 -0
  292. package/dist/sinks/memory/memory.descriptor.d.ts.map +1 -0
  293. package/dist/sinks/memory/memory.descriptor.js +17 -0
  294. package/dist/sinks/memory/memory.descriptor.js.map +1 -0
  295. package/dist/sinks/memory/memory.impl.d.ts +50 -0
  296. package/dist/sinks/memory/memory.impl.d.ts.map +1 -0
  297. package/dist/sinks/memory/memory.impl.js +88 -0
  298. package/dist/sinks/memory/memory.impl.js.map +1 -0
  299. package/dist/sinks/stdout/stdout.descriptor.d.ts +4 -0
  300. package/dist/sinks/stdout/stdout.descriptor.d.ts.map +1 -0
  301. package/dist/sinks/stdout/stdout.descriptor.js +11 -0
  302. package/dist/sinks/stdout/stdout.descriptor.js.map +1 -0
  303. package/dist/sinks/stdout/stdout.impl.cli.d.ts +10 -0
  304. package/dist/sinks/stdout/stdout.impl.cli.d.ts.map +1 -0
  305. package/dist/sinks/stdout/stdout.impl.cli.js +21 -0
  306. package/dist/sinks/stdout/stdout.impl.cli.js.map +1 -0
  307. package/dist/sinks.context.descriptor.d.ts +19 -0
  308. package/dist/sinks.context.descriptor.d.ts.map +1 -0
  309. package/dist/sinks.context.descriptor.js +9 -0
  310. package/dist/sinks.context.descriptor.js.map +1 -0
  311. package/dist/sinks.context.impl.d.ts +9 -0
  312. package/dist/sinks.context.impl.d.ts.map +1 -0
  313. package/dist/sinks.context.impl.js +18 -0
  314. package/dist/sinks.context.impl.js.map +1 -0
  315. package/package.json +331 -0
  316. package/src/audit/audit.descriptor.ts +45 -0
  317. package/src/audit/audit.storage.schema.ts +57 -0
  318. package/src/audit/index.ts +8 -0
  319. package/src/cli/logs.descriptor.ts +19 -0
  320. package/src/cli/logs.list.descriptor.ts +28 -0
  321. package/src/cli/logs.list.impl.ts +93 -0
  322. package/src/cli/logs.rotate.descriptor.ts +40 -0
  323. package/src/cli/logs.rotate.impl.ts +61 -0
  324. package/src/cli/logs.search.descriptor.ts +61 -0
  325. package/src/cli/logs.search.impl.ts +173 -0
  326. package/src/cli/logs.tail.descriptor.ts +49 -0
  327. package/src/cli/logs.tail.impl.ts +105 -0
  328. package/src/cli/logs.view.descriptor.ts +57 -0
  329. package/src/cli/logs.view.impl.ts +108 -0
  330. package/src/cli/types.ts +59 -0
  331. package/src/contexts/audit.ts +36 -0
  332. package/src/contexts/fallback-logger.ts +80 -0
  333. package/src/contexts/index.ts +23 -0
  334. package/src/contexts/logger.ts +119 -0
  335. package/src/core/index.ts +32 -0
  336. package/src/core/logger.ts +150 -0
  337. package/src/core/namespace.ts +195 -0
  338. package/src/core/parsing.ts +21 -0
  339. package/src/core/types.ts +82 -0
  340. package/src/docs/levels.docs.descriptor.ts +344 -0
  341. package/src/docs/structured.docs.descriptor.ts +444 -0
  342. package/src/docs/transports.docs.descriptor.ts +428 -0
  343. package/src/formatters/index.ts +6 -0
  344. package/src/formatters/json/json.formatters.descriptor.ts +25 -0
  345. package/src/formatters/json/json.impl.ts +41 -0
  346. package/src/formatters/json5/json5.descriptor.ts +25 -0
  347. package/src/formatters/json5/json5.impl.ts +43 -0
  348. package/src/formatters/jsonl/jsonl.descriptor.ts +26 -0
  349. package/src/formatters/jsonl/jsonl.impl.ts +39 -0
  350. package/src/formatters/pretty/pretty.descriptor.ts +26 -0
  351. package/src/formatters/pretty/pretty.impl.cli.ts +101 -0
  352. package/src/index.ts +190 -0
  353. package/src/kinds/audit.ts +169 -0
  354. package/src/kinds/contexts.ts +22 -0
  355. package/src/kinds/formatter.ts +117 -0
  356. package/src/kinds/index.ts +25 -0
  357. package/src/kinds/logger.contracts.ts +17 -0
  358. package/src/kinds/logger.impl.ts +206 -0
  359. package/src/kinds/logger.ts +46 -0
  360. package/src/kinds/logger.utils.ts +91 -0
  361. package/src/kinds/output.contracts.ts +54 -0
  362. package/src/kinds/output.impl.ts +118 -0
  363. package/src/kinds/output.ts +59 -0
  364. package/src/kinds/output.types.ts +105 -0
  365. package/src/kinds/sink.ts +100 -0
  366. package/src/logger.context.descriptor.ts +13 -0
  367. package/src/logging.cli.plugin.ts +43 -0
  368. package/src/logging.plugin.ts +93 -0
  369. package/src/outputs/index.ts +6 -0
  370. package/src/outputs/remote/remote.descriptor.ts +27 -0
  371. package/src/outputs/remote/remote.impl.ts +218 -0
  372. package/src/outputs.context.descriptor.ts +10 -0
  373. package/src/outputs.context.impl.ts +30 -0
  374. package/src/paths.ts +10 -0
  375. package/src/schemas/audit.ts +98 -0
  376. package/src/schemas/entry.ts +88 -0
  377. package/src/schemas/formatter.ts +37 -0
  378. package/src/schemas/index.ts +80 -0
  379. package/src/schemas/logger.ts +38 -0
  380. package/src/schemas/output.ts +62 -0
  381. package/src/schemas/sink.ts +39 -0
  382. package/src/sinks/buffer/buffer.descriptor.ts +13 -0
  383. package/src/sinks/buffer/buffer.impl.cli.ts +49 -0
  384. package/src/sinks/console/console.descriptor.ts +20 -0
  385. package/src/sinks/console/console.impl.browser.ts +69 -0
  386. package/src/sinks/console/console.impl.cli.ts +71 -0
  387. package/src/sinks/index.ts +8 -0
  388. package/src/sinks/memory/memory.descriptor.ts +20 -0
  389. package/src/sinks/memory/memory.impl.ts +119 -0
  390. package/src/sinks/stdout/stdout.descriptor.ts +13 -0
  391. package/src/sinks/stdout/stdout.impl.cli.ts +27 -0
  392. package/src/sinks.context.descriptor.ts +10 -0
  393. package/src/sinks.context.impl.ts +30 -0
@@ -0,0 +1,444 @@
1
+ import type { DocsTopicDescriptor } from '@vibesdotdev/docs';
2
+
3
+ const descriptor: DocsTopicDescriptor = {
4
+ kind: 'docs/topic',
5
+ id: 'logging.structured',
6
+ title: 'Structured Logging',
7
+ summary: 'Structured logging with context, formatters, and best practices',
8
+ body: {
9
+ type: 'markdown',
10
+ sourceType: 'raw',
11
+ source: `---
12
+ title: Structured Logging
13
+ summary: Structured logging with context, formatters, and best practices
14
+ tags: [logging, structured, context, formatters, json, best-practices]
15
+ parent: logging
16
+ order: 3
17
+ surfaces: [cli, web, in-app]
18
+ hardware: [consumer, cloud]
19
+ ---
20
+
21
+ # Structured Logging
22
+
23
+ Structured logging captures log entries as machine-readable data with consistent fields. This enables powerful querying, aggregation, and analysis.
24
+
25
+ ## Why Structured Logging
26
+
27
+ ### Unstructured (Traditional)
28
+
29
+ \`\`\`
30
+ 2024-01-01 12:00:00 INFO User john@example.com logged in from 192.168.1.1
31
+ \`\`\`
32
+
33
+ **Problems:**
34
+ - Hard to parse programmatically
35
+ - Inconsistent format
36
+ - Difficult to aggregate
37
+ - No schema enforcement
38
+
39
+ ### Structured
40
+
41
+ \`\`\`json
42
+ {
43
+ "timestamp": "2024-01-01T12:00:00.000Z",
44
+ "level": "info",
45
+ "namespace": "app:auth",
46
+ "message": "User logged in",
47
+ "context": {
48
+ "email": "john@example.com",
49
+ "ipAddress": "192.168.1.1",
50
+ "userId": "usr_123"
51
+ }
52
+ }
53
+ \`\`\`
54
+
55
+ **Benefits:**
56
+ - Machine-parseable
57
+ - Consistent schema
58
+ - Easy aggregation
59
+ - Queryable fields
60
+
61
+ ## Log Entry Structure
62
+
63
+ ### Standard Fields
64
+
65
+ \`\`\`ts
66
+ interface LogEntry {
67
+ timestamp: string; // ISO 8601 timestamp
68
+ level: string; // trace, debug, info, warn, error
69
+ namespace: string; // e.g., "app:auth"
70
+ message: string; // Human-readable message
71
+ context?: Record<string, unknown>; // Structured data
72
+ metadata?: {
73
+ requestId?: string;
74
+ userId?: string;
75
+ sessionId?: string;
76
+ };
77
+ }
78
+ \`\`\`
79
+
80
+ ### Example Entry
81
+
82
+ \`\`\`ts
83
+ logger.info('Payment processed', {
84
+ context: {
85
+ userId: 'usr_123',
86
+ amount: 99.99,
87
+ currency: 'USD',
88
+ paymentMethod: 'card'
89
+ },
90
+ metadata: {
91
+ requestId: 'req_456',
92
+ sessionId: 'ses_789'
93
+ }
94
+ });
95
+ \`\`\`
96
+
97
+ **Output:**
98
+ \`\`\`json
99
+ {
100
+ "timestamp": "2024-01-01T12:00:00.000Z",
101
+ "level": "info",
102
+ "namespace": "app:payments",
103
+ "message": "Payment processed",
104
+ "context": {
105
+ "userId": "usr_123",
106
+ "amount": 99.99,
107
+ "currency": "USD",
108
+ "paymentMethod": "card"
109
+ },
110
+ "metadata": {
111
+ "requestId": "req_456",
112
+ "sessionId": "ses_789"
113
+ }
114
+ }
115
+ \`\`\`
116
+
117
+ ## Context Objects
118
+
119
+ ### Basic Context
120
+
121
+ \`\`\`ts
122
+ logger.info('User action', {
123
+ action: 'login',
124
+ userId: 'usr_123',
125
+ success: true
126
+ });
127
+ \`\`\`
128
+
129
+ ### Nested Context
130
+
131
+ \`\`\`ts
132
+ logger.info('API request', {
133
+ request: {
134
+ method: 'POST',
135
+ path: '/api/users',
136
+ headers: {
137
+ 'content-type': 'application/json'
138
+ }
139
+ },
140
+ response: {
141
+ status: 201,
142
+ duration: 45
143
+ }
144
+ });
145
+ \`\`\`
146
+
147
+ ### Array Context
148
+
149
+ \`\`\`ts
150
+ logger.info('Batch operation', {
151
+ items: [
152
+ { id: 1, status: 'success' },
153
+ { id: 2, status: 'failed', error: 'Not found' },
154
+ { id: 3, status: 'success' }
155
+ ],
156
+ summary: {
157
+ total: 3,
158
+ success: 2,
159
+ failed: 1
160
+ }
161
+ });
162
+ \`\`\`
163
+
164
+ ## Formatters
165
+
166
+ ### Pretty Formatter
167
+
168
+ Human-readable output for development:
169
+
170
+ \`\`\`ts
171
+ import { prettyFormatter } from '@vibesdotdev/logging';
172
+
173
+ const formatted = prettyFormatter.format({
174
+ timestamp: '2024-01-01T12:00:00.000Z',
175
+ level: 'info',
176
+ namespace: 'app:server',
177
+ message: 'Server started',
178
+ context: { port: 3000 }
179
+ });
180
+
181
+ console.log(formatted);
182
+ // [INFO] [app:server] Server started { port: 3000 }
183
+ \`\`\`
184
+
185
+ ### JSON Formatter
186
+
187
+ Machine-readable output:
188
+
189
+ \`\`\`ts
190
+ import { jsonFormatter } from '@vibesdotdev/logging';
191
+
192
+ const formatted = jsonFormatter.format(entry);
193
+ // {"timestamp":"2024-01-01T12:00:00.000Z","level":"info",...}
194
+ \`\`\`
195
+
196
+ ### Custom Formatter
197
+
198
+ \`\`\`ts
199
+ import type { FormatterImplementation } from '@vibesdotdev/logging';
200
+
201
+ class CustomFormatter implements FormatterImplementation {
202
+ format(entry: LogEntry): string {
203
+ return \`[\${entry.level.toUpperCase()}] \${entry.timestamp} - \${entry.message}\`;
204
+ }
205
+ }
206
+ \`\`\`
207
+
208
+ ## Correlation IDs
209
+
210
+ ### Request Tracking
211
+
212
+ \`\`\`ts
213
+ import { logger } from '@vibesdotdev/logging';
214
+
215
+ // Generate correlation ID
216
+ const requestId = crypto.randomUUID();
217
+
218
+ // Include in all logs for this request
219
+ logger.setRequestContext({ requestId });
220
+
221
+ logger.info('Request started');
222
+ // ... handle request ...
223
+ logger.info('Request completed');
224
+
225
+ // All logs include requestId for correlation
226
+ \`\`\`
227
+
228
+ ### Distributed Tracing
229
+
230
+ \`\`\`ts
231
+ // Parent request
232
+ const requestId = 'req_123';
233
+ logger.setRequestContext({ requestId });
234
+
235
+ // Child span
236
+ const spanId = 'span_456';
237
+ logger.setRequestContext({ requestId, spanId });
238
+
239
+ logger.info('Database query');
240
+ // Links to parent request via requestId
241
+ \`\`\`
242
+
243
+ ## Error Logging
244
+
245
+ ### Error Context
246
+
247
+ \`\`\`ts
248
+ try {
249
+ await db.query(sql);
250
+ } catch (error) {
251
+ logger.error('Database query failed', {
252
+ context: {
253
+ query: sql,
254
+ parameters: params,
255
+ error: {
256
+ name: error.name,
257
+ message: error.message,
258
+ stack: error.stack
259
+ }
260
+ },
261
+ metadata: {
262
+ requestId
263
+ }
264
+ });
265
+ }
266
+ \`\`\`
267
+
268
+ ### Error Serialization
269
+
270
+ \`\`\`ts
271
+ import { serializeError } from '@vibesdotdev/logging';
272
+
273
+ logger.error('Operation failed', {
274
+ error: serializeError(error)
275
+ });
276
+
277
+ // Output:
278
+ // {
279
+ // "name": "Error",
280
+ // "message": "Something went wrong",
281
+ // "stack": "...",
282
+ // "code": "ECONNREFUSED"
283
+ // }
284
+ \`\`\`
285
+
286
+ ## Performance Logging
287
+
288
+ ### Duration Tracking
289
+
290
+ \`\`\`ts
291
+ const start = performance.now();
292
+ await expensiveOperation();
293
+ const duration = performance.now() - start;
294
+
295
+ logger.info('Operation completed', {
296
+ context: {
297
+ operation: 'expensiveOperation',
298
+ duration: Math.round(duration * 100) / 100 // ms
299
+ }
300
+ });
301
+ \`\`\`
302
+
303
+ ### Metrics Collection
304
+
305
+ \`\`\`ts
306
+ logger.info('Metrics', {
307
+ context: {
308
+ type: 'performance',
309
+ metrics: {
310
+ cpu: process.cpuUsage(),
311
+ memory: process.memoryUsage(),
312
+ requests: activeRequests
313
+ }
314
+ }
315
+ });
316
+ \`\`\`
317
+
318
+ ## Security Logging
319
+
320
+ ### Sanitize Sensitive Data
321
+
322
+ \`\`\`ts
323
+ import { sanitizeForLogging } from '@vibesdotdev/logging';
324
+
325
+ const userData = {
326
+ email: 'user@example.com',
327
+ password: 'secret123', // Will be redacted
328
+ token: 'abc123' // Will be redacted
329
+ };
330
+
331
+ logger.info('User data', {
332
+ context: sanitizeForLogging(userData, ['password', 'token'])
333
+ });
334
+
335
+ // Output:
336
+ // { "email": "user@example.com", "password": "[REDACTED]", "token": "[REDACTED]" }
337
+ \`\`\`
338
+
339
+ ### Audit Logging
340
+
341
+ \`\`\`ts
342
+ import { auditLogger } from '@vibesdotdev/logging';
343
+
344
+ auditLogger.authentication({
345
+ userId: 'usr_123',
346
+ action: 'login',
347
+ success: true,
348
+ ipAddress: '192.168.1.1',
349
+ userAgent: 'Mozilla/5.0...'
350
+ });
351
+
352
+ auditLogger.authorization({
353
+ userId: 'usr_123',
354
+ resource: 'users/456',
355
+ action: 'delete',
356
+ allowed: false,
357
+ reason: 'Insufficient permissions'
358
+ });
359
+ \`\`\`
360
+
361
+ ## Best Practices
362
+
363
+ ### DO
364
+
365
+ \`\`\`ts
366
+ // ✅ Use structured context
367
+ logger.info('User created', {
368
+ context: { userId: 'usr_123', email: 'user@example.com' }
369
+ });
370
+
371
+ // ✅ Include correlation IDs
372
+ logger.setRequestContext({ requestId: 'req_123' });
373
+
374
+ // ✅ Use appropriate levels
375
+ logger.debug('Debug info');
376
+ logger.error('Error with context', { error: error.message });
377
+
378
+ // ✅ Sanitize sensitive data
379
+ logger.info('Auth attempt', {
380
+ context: { username, password: '[REDACTED]' }
381
+ });
382
+ \`\`\`
383
+
384
+ ### DON'T
385
+
386
+ \`\`\`ts
387
+ // ❌ String concatenation
388
+ logger.info('User ' + userId + ' logged in');
389
+
390
+ // ❌ Logging sensitive data
391
+ logger.info('Auth', { password, token });
392
+
393
+ // ❌ Logging everything as error
394
+ logger.error('User logged in'); // This is info level!
395
+
396
+ // ❌ Unstructured messages
397
+ logger.info('Something happened with user ' + userId + ' at ' + new Date());
398
+ \`\`\`
399
+
400
+ ## Query Examples
401
+
402
+ ### Log Aggregation Queries
403
+
404
+ \`\`\`sql
405
+ -- Count errors by namespace
406
+ SELECT namespace, COUNT(*) as error_count
407
+ FROM logs
408
+ WHERE level = 'error'
409
+ GROUP BY namespace;
410
+
411
+ -- Average response time by endpoint
412
+ SELECT
413
+ context->>'endpoint' as endpoint,
414
+ AVG(context->>'duration') as avg_duration
415
+ FROM logs
416
+ WHERE message = 'API request completed'
417
+ GROUP BY endpoint;
418
+
419
+ -- User activity timeline
420
+ SELECT
421
+ context->>'userId' as user_id,
422
+ timestamp,
423
+ message
424
+ FROM logs
425
+ WHERE context->>'userId' = 'usr_123'
426
+ ORDER BY timestamp;
427
+ \`\`\`
428
+
429
+ :::card{title="See also"}
430
+ - [\`logging.levels\`](logging.levels) — Log levels
431
+ - [\`logging.transports\`](logging.transports) — Transport layers
432
+ - [\`config.environment\`](config.environment) — Environment configuration
433
+ :::
434
+ `
435
+ },
436
+ parent: 'logging',
437
+ order: 3,
438
+ tags: ['logging', 'structured', 'context', 'formatters', 'json', 'best-practices'],
439
+ surfaces: ['cli', 'web', 'in-app'],
440
+ hardware: ['consumer', 'cloud'],
441
+ enabled: true
442
+ };
443
+
444
+ export default descriptor;