@spinajs/log 2.0.481 → 2.0.484

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 (304) hide show
  1. package/README.md +744 -0
  2. package/lib/cjs/archive/LogArchiveService.d.ts +75 -0
  3. package/lib/cjs/archive/LogArchiveService.d.ts.map +1 -0
  4. package/lib/cjs/archive/LogArchiveService.js +189 -0
  5. package/lib/cjs/archive/LogArchiveService.js.map +1 -0
  6. package/lib/cjs/archive/archive-strategy.d.ts +32 -0
  7. package/lib/cjs/archive/archive-strategy.d.ts.map +1 -0
  8. package/lib/cjs/archive/archive-strategy.js +43 -0
  9. package/lib/cjs/archive/archive-strategy.js.map +1 -0
  10. package/lib/cjs/archive/context.d.ts +50 -0
  11. package/lib/cjs/archive/context.d.ts.map +1 -0
  12. package/lib/cjs/archive/context.js +3 -0
  13. package/lib/cjs/archive/context.js.map +1 -0
  14. package/lib/cjs/archive/index.d.ts +10 -0
  15. package/lib/cjs/archive/index.d.ts.map +1 -0
  16. package/lib/cjs/archive/index.js +26 -0
  17. package/lib/cjs/archive/index.js.map +1 -0
  18. package/lib/cjs/archive/retention-strategy.d.ts +26 -0
  19. package/lib/cjs/archive/retention-strategy.d.ts.map +1 -0
  20. package/lib/cjs/archive/retention-strategy.js +42 -0
  21. package/lib/cjs/archive/retention-strategy.js.map +1 -0
  22. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
  23. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
  24. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js +46 -0
  25. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
  26. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
  27. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
  28. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js +42 -0
  29. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
  30. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
  31. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
  32. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js +52 -0
  33. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
  34. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
  35. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
  36. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js +63 -0
  37. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
  38. package/lib/cjs/archive/strategies/util.d.ts +28 -0
  39. package/lib/cjs/archive/strategies/util.d.ts.map +1 -0
  40. package/lib/cjs/archive/strategies/util.js +59 -0
  41. package/lib/cjs/archive/strategies/util.js.map +1 -0
  42. package/lib/cjs/bootstrap.d.ts.map +1 -1
  43. package/lib/cjs/bootstrap.js +24 -1
  44. package/lib/cjs/bootstrap.js.map +1 -1
  45. package/lib/cjs/callsite.d.ts +26 -0
  46. package/lib/cjs/callsite.d.ts.map +1 -0
  47. package/lib/cjs/callsite.js +60 -0
  48. package/lib/cjs/callsite.js.map +1 -0
  49. package/lib/cjs/config/log.d.ts +96 -0
  50. package/lib/cjs/config/log.d.ts.map +1 -0
  51. package/lib/cjs/config/log.js +75 -0
  52. package/lib/cjs/config/log.js.map +1 -0
  53. package/lib/cjs/context.browser.d.ts +46 -0
  54. package/lib/cjs/context.browser.d.ts.map +1 -0
  55. package/lib/cjs/context.browser.js +85 -0
  56. package/lib/cjs/context.browser.js.map +1 -0
  57. package/lib/cjs/context.d.ts +61 -0
  58. package/lib/cjs/context.d.ts.map +1 -0
  59. package/lib/cjs/context.js +92 -0
  60. package/lib/cjs/context.js.map +1 -0
  61. package/lib/cjs/filters/LevelFilter.d.ts +24 -0
  62. package/lib/cjs/filters/LevelFilter.d.ts.map +1 -0
  63. package/lib/cjs/filters/LevelFilter.js +39 -0
  64. package/lib/cjs/filters/LevelFilter.js.map +1 -0
  65. package/lib/cjs/filters/MatchFilter.d.ts +30 -0
  66. package/lib/cjs/filters/MatchFilter.d.ts.map +1 -0
  67. package/lib/cjs/filters/MatchFilter.js +65 -0
  68. package/lib/cjs/filters/MatchFilter.js.map +1 -0
  69. package/lib/cjs/filters/RateLimitFilter.d.ts +37 -0
  70. package/lib/cjs/filters/RateLimitFilter.d.ts.map +1 -0
  71. package/lib/cjs/filters/RateLimitFilter.js +70 -0
  72. package/lib/cjs/filters/RateLimitFilter.js.map +1 -0
  73. package/lib/cjs/filters/index.d.ts +4 -0
  74. package/lib/cjs/filters/index.d.ts.map +1 -0
  75. package/lib/cjs/filters/index.js +20 -0
  76. package/lib/cjs/filters/index.js.map +1 -0
  77. package/lib/cjs/index.browser.d.ts +14 -0
  78. package/lib/cjs/index.browser.d.ts.map +1 -0
  79. package/lib/cjs/index.browser.js +46 -0
  80. package/lib/cjs/index.browser.js.map +1 -0
  81. package/lib/cjs/index.d.ts +8 -0
  82. package/lib/cjs/index.d.ts.map +1 -1
  83. package/lib/cjs/index.js +8 -0
  84. package/lib/cjs/index.js.map +1 -1
  85. package/lib/cjs/log.d.ts +60 -1
  86. package/lib/cjs/log.d.ts.map +1 -1
  87. package/lib/cjs/log.js +294 -32
  88. package/lib/cjs/log.js.map +1 -1
  89. package/lib/cjs/perf/LogMetricSink.d.ts +55 -0
  90. package/lib/cjs/perf/LogMetricSink.d.ts.map +1 -0
  91. package/lib/cjs/perf/LogMetricSink.js +154 -0
  92. package/lib/cjs/perf/LogMetricSink.js.map +1 -0
  93. package/lib/cjs/perf/measure.d.ts +9 -0
  94. package/lib/cjs/perf/measure.d.ts.map +1 -0
  95. package/lib/cjs/perf/measure.js +21 -0
  96. package/lib/cjs/perf/measure.js.map +1 -0
  97. package/lib/cjs/perf.d.ts +9 -0
  98. package/lib/cjs/perf.d.ts.map +1 -0
  99. package/lib/cjs/perf.js +18 -0
  100. package/lib/cjs/perf.js.map +1 -0
  101. package/lib/cjs/schemas/log.configuration.d.ts +151 -18
  102. package/lib/cjs/schemas/log.configuration.d.ts.map +1 -1
  103. package/lib/cjs/schemas/log.configuration.js +154 -21
  104. package/lib/cjs/schemas/log.configuration.js.map +1 -1
  105. package/lib/cjs/targets/BrowserConsoleTarget.d.ts +48 -0
  106. package/lib/cjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
  107. package/lib/cjs/targets/BrowserConsoleTarget.js +48 -0
  108. package/lib/cjs/targets/BrowserConsoleTarget.js.map +1 -0
  109. package/lib/cjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
  110. package/lib/cjs/targets/ColoredConsoleTarget.js +21 -12
  111. package/lib/cjs/targets/ColoredConsoleTarget.js.map +1 -1
  112. package/lib/cjs/targets/FileTarget.d.ts +96 -20
  113. package/lib/cjs/targets/FileTarget.d.ts.map +1 -1
  114. package/lib/cjs/targets/FileTarget.js +188 -225
  115. package/lib/cjs/targets/FileTarget.js.map +1 -1
  116. package/lib/cjs/targets/JsonFileTarget.d.ts +19 -0
  117. package/lib/cjs/targets/JsonFileTarget.d.ts.map +1 -0
  118. package/lib/cjs/targets/JsonFileTarget.js +44 -0
  119. package/lib/cjs/targets/JsonFileTarget.js.map +1 -0
  120. package/lib/cjs/targets/JsonTarget.d.ts +27 -0
  121. package/lib/cjs/targets/JsonTarget.d.ts.map +1 -0
  122. package/lib/cjs/targets/JsonTarget.js +46 -0
  123. package/lib/cjs/targets/JsonTarget.js.map +1 -0
  124. package/lib/cjs/targets/MemoryTarget.d.ts +33 -0
  125. package/lib/cjs/targets/MemoryTarget.d.ts.map +1 -0
  126. package/lib/cjs/targets/MemoryTarget.js +63 -0
  127. package/lib/cjs/targets/MemoryTarget.js.map +1 -0
  128. package/lib/cjs/targets/index.d.ts +7 -0
  129. package/lib/cjs/targets/index.d.ts.map +1 -1
  130. package/lib/cjs/targets/index.js +7 -0
  131. package/lib/cjs/targets/index.js.map +1 -1
  132. package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
  133. package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
  134. package/lib/cjs/targets/wrappers/AutoFlushTarget.js +48 -0
  135. package/lib/cjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
  136. package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
  137. package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
  138. package/lib/cjs/targets/wrappers/FallbackGroupTarget.js +94 -0
  139. package/lib/cjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
  140. package/lib/cjs/targets/wrappers/RetryingTarget.d.ts +44 -0
  141. package/lib/cjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
  142. package/lib/cjs/targets/wrappers/RetryingTarget.js +61 -0
  143. package/lib/cjs/targets/wrappers/RetryingTarget.js.map +1 -0
  144. package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
  145. package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
  146. package/lib/cjs/targets/wrappers/SplitGroupTarget.js +52 -0
  147. package/lib/cjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
  148. package/lib/cjs/traceparent.d.ts +63 -0
  149. package/lib/cjs/traceparent.d.ts.map +1 -0
  150. package/lib/cjs/traceparent.js +107 -0
  151. package/lib/cjs/traceparent.js.map +1 -0
  152. package/lib/mjs/archive/LogArchiveService.d.ts +75 -0
  153. package/lib/mjs/archive/LogArchiveService.d.ts.map +1 -0
  154. package/lib/mjs/archive/LogArchiveService.js +186 -0
  155. package/lib/mjs/archive/LogArchiveService.js.map +1 -0
  156. package/lib/mjs/archive/archive-strategy.d.ts +32 -0
  157. package/lib/mjs/archive/archive-strategy.d.ts.map +1 -0
  158. package/lib/mjs/archive/archive-strategy.js +39 -0
  159. package/lib/mjs/archive/archive-strategy.js.map +1 -0
  160. package/lib/mjs/archive/context.d.ts +50 -0
  161. package/lib/mjs/archive/context.d.ts.map +1 -0
  162. package/lib/mjs/archive/context.js +2 -0
  163. package/lib/mjs/archive/context.js.map +1 -0
  164. package/lib/mjs/archive/index.d.ts +10 -0
  165. package/lib/mjs/archive/index.d.ts.map +1 -0
  166. package/lib/mjs/archive/index.js +10 -0
  167. package/lib/mjs/archive/index.js.map +1 -0
  168. package/lib/mjs/archive/retention-strategy.d.ts +26 -0
  169. package/lib/mjs/archive/retention-strategy.d.ts.map +1 -0
  170. package/lib/mjs/archive/retention-strategy.js +38 -0
  171. package/lib/mjs/archive/retention-strategy.js.map +1 -0
  172. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
  173. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
  174. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js +43 -0
  175. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
  176. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
  177. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
  178. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js +39 -0
  179. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
  180. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
  181. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
  182. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js +49 -0
  183. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
  184. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
  185. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
  186. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js +60 -0
  187. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
  188. package/lib/mjs/archive/strategies/util.d.ts +28 -0
  189. package/lib/mjs/archive/strategies/util.d.ts.map +1 -0
  190. package/lib/mjs/archive/strategies/util.js +54 -0
  191. package/lib/mjs/archive/strategies/util.js.map +1 -0
  192. package/lib/mjs/bootstrap.d.ts.map +1 -1
  193. package/lib/mjs/bootstrap.js +25 -2
  194. package/lib/mjs/bootstrap.js.map +1 -1
  195. package/lib/mjs/callsite.d.ts +26 -0
  196. package/lib/mjs/callsite.d.ts.map +1 -0
  197. package/lib/mjs/callsite.js +57 -0
  198. package/lib/mjs/callsite.js.map +1 -0
  199. package/lib/mjs/config/log.d.ts +96 -0
  200. package/lib/mjs/config/log.d.ts.map +1 -0
  201. package/lib/mjs/config/log.js +72 -0
  202. package/lib/mjs/config/log.js.map +1 -0
  203. package/lib/mjs/context.browser.d.ts +46 -0
  204. package/lib/mjs/context.browser.d.ts.map +1 -0
  205. package/lib/mjs/context.browser.js +81 -0
  206. package/lib/mjs/context.browser.js.map +1 -0
  207. package/lib/mjs/context.d.ts +61 -0
  208. package/lib/mjs/context.d.ts.map +1 -0
  209. package/lib/mjs/context.js +88 -0
  210. package/lib/mjs/context.js.map +1 -0
  211. package/lib/mjs/filters/LevelFilter.d.ts +24 -0
  212. package/lib/mjs/filters/LevelFilter.d.ts.map +1 -0
  213. package/lib/mjs/filters/LevelFilter.js +36 -0
  214. package/lib/mjs/filters/LevelFilter.js.map +1 -0
  215. package/lib/mjs/filters/MatchFilter.d.ts +30 -0
  216. package/lib/mjs/filters/MatchFilter.d.ts.map +1 -0
  217. package/lib/mjs/filters/MatchFilter.js +62 -0
  218. package/lib/mjs/filters/MatchFilter.js.map +1 -0
  219. package/lib/mjs/filters/RateLimitFilter.d.ts +37 -0
  220. package/lib/mjs/filters/RateLimitFilter.d.ts.map +1 -0
  221. package/lib/mjs/filters/RateLimitFilter.js +67 -0
  222. package/lib/mjs/filters/RateLimitFilter.js.map +1 -0
  223. package/lib/mjs/filters/index.d.ts +4 -0
  224. package/lib/mjs/filters/index.d.ts.map +1 -0
  225. package/lib/mjs/filters/index.js +4 -0
  226. package/lib/mjs/filters/index.js.map +1 -0
  227. package/lib/mjs/index.browser.d.ts +14 -0
  228. package/lib/mjs/index.browser.d.ts.map +1 -0
  229. package/lib/mjs/index.browser.js +30 -0
  230. package/lib/mjs/index.browser.js.map +1 -0
  231. package/lib/mjs/index.d.ts +8 -0
  232. package/lib/mjs/index.d.ts.map +1 -1
  233. package/lib/mjs/index.js +8 -0
  234. package/lib/mjs/index.js.map +1 -1
  235. package/lib/mjs/log.d.ts +60 -1
  236. package/lib/mjs/log.d.ts.map +1 -1
  237. package/lib/mjs/log.js +295 -33
  238. package/lib/mjs/log.js.map +1 -1
  239. package/lib/mjs/perf/LogMetricSink.d.ts +55 -0
  240. package/lib/mjs/perf/LogMetricSink.d.ts.map +1 -0
  241. package/lib/mjs/perf/LogMetricSink.js +151 -0
  242. package/lib/mjs/perf/LogMetricSink.js.map +1 -0
  243. package/lib/mjs/perf/measure.d.ts +9 -0
  244. package/lib/mjs/perf/measure.d.ts.map +1 -0
  245. package/lib/mjs/perf/measure.js +18 -0
  246. package/lib/mjs/perf/measure.js.map +1 -0
  247. package/lib/mjs/perf.d.ts +9 -0
  248. package/lib/mjs/perf.d.ts.map +1 -0
  249. package/lib/mjs/perf.js +15 -0
  250. package/lib/mjs/perf.js.map +1 -0
  251. package/lib/mjs/schemas/log.configuration.d.ts +151 -18
  252. package/lib/mjs/schemas/log.configuration.d.ts.map +1 -1
  253. package/lib/mjs/schemas/log.configuration.js +154 -21
  254. package/lib/mjs/schemas/log.configuration.js.map +1 -1
  255. package/lib/mjs/targets/BrowserConsoleTarget.d.ts +48 -0
  256. package/lib/mjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
  257. package/lib/mjs/targets/BrowserConsoleTarget.js +45 -0
  258. package/lib/mjs/targets/BrowserConsoleTarget.js.map +1 -0
  259. package/lib/mjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
  260. package/lib/mjs/targets/ColoredConsoleTarget.js +21 -9
  261. package/lib/mjs/targets/ColoredConsoleTarget.js.map +1 -1
  262. package/lib/mjs/targets/FileTarget.d.ts +96 -20
  263. package/lib/mjs/targets/FileTarget.d.ts.map +1 -1
  264. package/lib/mjs/targets/FileTarget.js +191 -192
  265. package/lib/mjs/targets/FileTarget.js.map +1 -1
  266. package/lib/mjs/targets/JsonFileTarget.d.ts +19 -0
  267. package/lib/mjs/targets/JsonFileTarget.d.ts.map +1 -0
  268. package/lib/mjs/targets/JsonFileTarget.js +41 -0
  269. package/lib/mjs/targets/JsonFileTarget.js.map +1 -0
  270. package/lib/mjs/targets/JsonTarget.d.ts +27 -0
  271. package/lib/mjs/targets/JsonTarget.d.ts.map +1 -0
  272. package/lib/mjs/targets/JsonTarget.js +43 -0
  273. package/lib/mjs/targets/JsonTarget.js.map +1 -0
  274. package/lib/mjs/targets/MemoryTarget.d.ts +33 -0
  275. package/lib/mjs/targets/MemoryTarget.d.ts.map +1 -0
  276. package/lib/mjs/targets/MemoryTarget.js +60 -0
  277. package/lib/mjs/targets/MemoryTarget.js.map +1 -0
  278. package/lib/mjs/targets/index.d.ts +7 -0
  279. package/lib/mjs/targets/index.d.ts.map +1 -1
  280. package/lib/mjs/targets/index.js +7 -0
  281. package/lib/mjs/targets/index.js.map +1 -1
  282. package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
  283. package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
  284. package/lib/mjs/targets/wrappers/AutoFlushTarget.js +45 -0
  285. package/lib/mjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
  286. package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
  287. package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
  288. package/lib/mjs/targets/wrappers/FallbackGroupTarget.js +91 -0
  289. package/lib/mjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
  290. package/lib/mjs/targets/wrappers/RetryingTarget.d.ts +44 -0
  291. package/lib/mjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
  292. package/lib/mjs/targets/wrappers/RetryingTarget.js +58 -0
  293. package/lib/mjs/targets/wrappers/RetryingTarget.js.map +1 -0
  294. package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
  295. package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
  296. package/lib/mjs/targets/wrappers/SplitGroupTarget.js +49 -0
  297. package/lib/mjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
  298. package/lib/mjs/traceparent.d.ts +63 -0
  299. package/lib/mjs/traceparent.d.ts.map +1 -0
  300. package/lib/mjs/traceparent.js +100 -0
  301. package/lib/mjs/traceparent.js.map +1 -0
  302. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  303. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  304. package/package.json +26 -15
@@ -1,265 +1,228 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
2
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
23
7
  };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
8
  var __metadata = (this && this.__metadata) || function (k, v) {
42
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
10
  };
44
- var __importDefault = (this && this.__importDefault) || function (mod) {
45
- return (mod && mod.__esModule) ? mod : { "default": mod };
46
- };
47
11
  Object.defineProperty(exports, "__esModule", { value: true });
48
12
  exports.FileTarget = void 0;
49
- /* eslint-disable security/detect-object-injection */
50
13
  const os_1 = require("os");
51
- const fs_1 = __importDefault(require("fs"));
52
- const path = __importStar(require("path"));
53
- const glob_1 = __importDefault(require("glob"));
54
- const zlib = __importStar(require("zlib"));
55
- const stream_1 = require("stream");
14
+ const path_1 = require("path");
56
15
  const configuration_1 = require("@spinajs/configuration");
57
16
  const exceptions_1 = require("@spinajs/exceptions");
58
17
  const di_1 = require("@spinajs/di");
59
18
  const log_common_1 = require("@spinajs/log-common");
60
- const lodash_1 = __importDefault(require("lodash"));
61
- var FileTargetStatus;
62
- (function (FileTargetStatus) {
63
- FileTargetStatus[FileTargetStatus["WRITTING"] = 0] = "WRITTING";
64
- FileTargetStatus[FileTargetStatus["PENDING"] = 1] = "PENDING";
65
- FileTargetStatus[FileTargetStatus["IDLE"] = 2] = "IDLE";
66
- })(FileTargetStatus || (FileTargetStatus = {}));
67
- // we mark per instance check becouse we can have multiple file targes
68
- // for different files/paths/logs but we dont want to create every time writer for same.
19
+ const LogArchiveService_js_1 = require("../archive/LogArchiveService.js");
20
+ const log_js_1 = require("../config/log.js");
21
+ /**
22
+ * Writes log messages to a file through the @spinajs/fs abstraction.
23
+ *
24
+ * Messages are buffered in memory and flushed as a single batched append,
25
+ * either when the buffer reaches `maxBufferSize` or on a periodic flush tick.
26
+ * Rotation / archiving / retention is delegated to {@link LogArchiveService}.
27
+ *
28
+ * A single async write-lock ( a promise-chain mutex ) serializes every flush
29
+ * and every rotation, so a rename can never race an in-flight append.
30
+ *
31
+ * PerInstanceCheck: multiple file targets can point at different files, but two
32
+ * targets with the same name share one writer.
33
+ */
69
34
  let FileTarget = class FileTarget extends log_common_1.LogTarget {
70
35
  constructor() {
71
36
  super(...arguments);
72
- this.Buffer = [];
73
- this.WriteBuffer = [];
74
- this.Status = FileTargetStatus.IDLE;
75
- this.ArchiveStatus = FileTargetStatus.IDLE;
37
+ /**
38
+ * Directory ( relative to ArchiveFs ) archives are stored in.
39
+ */
40
+ this.ArchiveDir = "";
41
+ /**
42
+ * Set true when the queue drops overflow, so the drop warning is emitted ONCE
43
+ * per overflow episode and reset when a batch appends successfully.
44
+ */
45
+ this.Overflowed = false;
46
+ /**
47
+ * Promise-chain mutex tail. Every critical section ( flush, rotation ) chains
48
+ * onto this so they run strictly one at a time.
49
+ */
50
+ this.WriteLock = Promise.resolve();
51
+ this.Disposed = false;
76
52
  }
77
53
  __checkInstance__(creationOptions) {
78
54
  return this.Options.name === creationOptions[0].name;
79
55
  }
80
56
  resolve() {
81
- this.Options.options = Object.assign({
82
- compress: true,
83
- maxSize: 1024 * 1024,
84
- maxArchiveFiles: 5,
85
- archiveInterval: 3 * 60,
86
- }, this.Options.options);
87
- this.LogDirPath = path.dirname(path.resolve((0, configuration_1.format)(null, this.Options.options.path)));
88
- this.ArchiveDirPath = this.Options.options.archivePath ? path.resolve((0, configuration_1.format)(null, this.Options.options.archivePath)) : this.LogDirPath;
89
- if (!this.LogDirPath) {
90
- throw new exceptions_1.InvalidOption("Missing LogDirPath log option");
91
- }
92
- if (!fs_1.default.existsSync(this.LogDirPath)) {
93
- fs_1.default.mkdirSync(this.LogDirPath, { recursive: true });
94
- }
95
- if (this.ArchiveDirPath) {
96
- if (!fs_1.default.existsSync(this.ArchiveDirPath)) {
97
- fs_1.default.mkdirSync(this.ArchiveDirPath, { recursive: true });
98
- }
57
+ // Defaults come from the shipped `logger.file` config ( discoverable and
58
+ // user-overridable like every other spinajs package ). LOG_FILE_DEFAULTS is
59
+ // the same object the config ships and is used as a last-resort fallback for
60
+ // environments where the config file was not discovered ( eg. some tests ).
61
+ // Merge order ( lowest to highest ): constant < config < per-target options.
62
+ const cfg = di_1.DI.get(configuration_1.Configuration);
63
+ const fileDefaults = cfg ? cfg.get("logger.file", {}) : {};
64
+ this.Options.options = Object.assign({}, log_js_1.LOG_FILE_DEFAULTS, fileDefaults, this.Options.options);
65
+ if (!this.Options.options.path) {
66
+ throw new exceptions_1.InvalidOption(`FileTarget ${this.Options.name} requires a 'path' option`);
99
67
  }
100
- // flush all buffered messages at least once per second
101
- // we do this, becouse buffer can not be filled
102
- // and we could wait unknown amount of time before messages are written to file
103
- this.FlushTimer = setInterval(() => {
104
- // do not flush, if we already writting to file
105
- if (this.Status !== FileTargetStatus.IDLE && this.ArchiveStatus !== FileTargetStatus.IDLE) {
106
- return;
107
- }
108
- this.WriteBuffer = [...this.WriteBuffer, ...this.Buffer];
109
- this.Buffer = [];
110
- setImmediate(() => {
111
- this.flush();
112
- });
113
- }, 1000);
114
- // every 3 minutes try to archive log files
115
- this.ArchiveTimer = setInterval(() => {
116
- // do not archive if we already doing it
117
- if (this.Status !== FileTargetStatus.IDLE && this.ArchiveStatus !== FileTargetStatus.IDLE) {
118
- return;
119
- }
120
- this.ArchiveStatus = FileTargetStatus.PENDING;
121
- // at end of nodejs event loop
122
- setImmediate(() => {
123
- this.archive();
124
- });
125
- }, this.Options.options.archiveInterval * 1000);
68
+ // start async init - fs resolution and dir creation cannot run in a sync
69
+ // SyncService.resolve, so writes buffer until Ready settles
70
+ this.Ready = this.init();
71
+ this.Ready.catch((err) => {
72
+ this.HasError = true;
73
+ this.Error = err;
74
+ this.Log.error(err, `Cannot initialize file target ${this.Options.name}`);
75
+ });
76
+ // BatchQueue owns accumulation, the periodic flush tick ( unref'd, so a
77
+ // pending flush never keeps the process alive ) and the hard queue cap. The
78
+ // batched append itself runs in append() under the write-lock.
79
+ this.Queue = new log_common_1.BatchQueue({
80
+ maxBatch: this.Options.options.maxBufferSize,
81
+ maxQueue: this.Options.options.maxQueueSize,
82
+ flushIntervalMs: this.Options.options.flushInterval ?? log_js_1.LOG_FILE_DEFAULTS.flushInterval,
83
+ onFlush: (batch) => this.append(batch),
84
+ onOverflow: (droppedItems) => {
85
+ // droppedItems here are already-formatted STRINGS, so we cannot
86
+ // reconstruct the original ILogEntry to route via OnDropped. File
87
+ // overflow stays warn-only ( count from droppedItems.length ). The
88
+ // drop-hook ( D ) targets the network-primary -> file-fallback case,
89
+ // not File-as-primary drops.
90
+ if (!this.Overflowed) {
91
+ this.Overflowed = true;
92
+ this.Log.warn(`File target ${this.Options.name} buffer exceeded ${this.Options.options.maxQueueSize} messages, dropped ${droppedItems.length} oldest buffered messages.`);
93
+ }
94
+ },
95
+ });
126
96
  super.resolve();
127
97
  }
128
- flush() {
129
- if (this.WriteBuffer.length === 0) {
130
- this.Status = FileTargetStatus.IDLE;
131
- return;
98
+ /**
99
+ * Resolves fs providers, ensures directories exist, builds the archive
100
+ * context and starts the archive service.
101
+ */
102
+ async init() {
103
+ const o = this.Options.options;
104
+ // o.fs is always populated from LOG_FILE_DEFAULTS ( see resolve() )
105
+ this.Fs = di_1.DI.resolve("__file_provider__", [o.fs]);
106
+ this.ArchiveFs = o.archiveFs ? di_1.DI.resolve("__file_provider__", [o.archiveFs]) : this.Fs;
107
+ // path is relative to the fs provider base path; ensure its directory exists
108
+ const logDir = path_1.posix.dirname(this.activePath());
109
+ if (logDir && logDir !== ".") {
110
+ await this.Fs.mkdir(logDir);
132
111
  }
133
- this.Status = FileTargetStatus.WRITTING;
134
- // we calculate log path every time to allow for
135
- // dynamic path creation eg. based on timestamp
136
- const logFileName = (0, configuration_1.format)({ logger: this.Options.name }, path.basename(this.Options.options.path));
137
- const logPath = path.join(this.LogDirPath, logFileName);
138
- fs_1.default.appendFile(logPath, this.WriteBuffer.join(os_1.EOL) + os_1.EOL, (err) => {
139
- // log error message to others if applicable eg. console
140
- if (err) {
141
- this.Log.error(err, `Cannot write log messages to file target at path ${logPath}`);
142
- }
143
- this.Log.trace(`Wrote buffered messages to log file at path ${logPath}, buffer size: ${this.Options.options.maxBufferSize}`);
144
- this.WriteBuffer = [];
145
- this.Status = FileTargetStatus.IDLE;
146
- });
147
- }
148
- async dispose() {
149
- // stop archiving
150
- clearInterval(this.ArchiveTimer);
151
- // stop flush timer
152
- clearInterval(this.FlushTimer);
153
- // write all messages from buffer
154
- this.WriteBuffer = [...this.WriteBuffer, ...this.Buffer];
155
- this.flush();
112
+ // archivePath ( when set ) is a directory relative to the archive fs; when
113
+ // not set, archives live in the same directory as the active log
114
+ this.ArchiveDir = o.archivePath ? this.normalize((0, configuration_1.format)(null, o.archivePath)) : logDir === "." ? "" : logDir;
115
+ if (this.ArchiveDir) {
116
+ await this.ArchiveFs.mkdir(this.ArchiveDir);
117
+ }
118
+ this.Context = {
119
+ fs: this.Fs,
120
+ archiveFs: this.ArchiveFs,
121
+ activePath: this.activePath(),
122
+ archiveDir: this.ArchiveDir,
123
+ options: o,
124
+ logger: this.Log,
125
+ rotate: () => this.ArchiveService.rotate(this.Context),
126
+ withWriteLock: (fn) => this.withWriteLock(fn),
127
+ };
128
+ this.ArchiveService = await di_1.DI.resolve(LogArchiveService_js_1.LogArchiveService);
129
+ await this.ArchiveService.start(this.Context);
156
130
  }
157
131
  async write(data) {
158
- if (!this.Options.enabled) {
132
+ if (!this.Options.enabled || this.Disposed) {
159
133
  return;
160
134
  }
161
- const lEntry = (0, configuration_1.format)(data.Variables, this.Options.layout);
162
- this.Buffer.push(lEntry);
163
- // if we already writting, skip buffer check & write to file
164
- // wait until write is finished
165
- if (this.Status !== FileTargetStatus.IDLE || this.ArchiveStatus !== FileTargetStatus.IDLE) {
135
+ const entry = this.formatEntry(data);
136
+ // enqueue awaits the batched append when maxBatch ( = maxBufferSize ) is
137
+ // reached, preserving the old "await flush when full" back-pressure
138
+ await this.Queue.enqueue(entry);
139
+ }
140
+ /**
141
+ * Builds the single line appended for one entry. Overridable so subclasses can
142
+ * change ONLY the per-entry serialization while reusing the whole FileTarget
143
+ * pipeline ( batched append, write-lock, rotation, retention, zip ). The base
144
+ * renders the configured string `layout`.
145
+ */
146
+ formatEntry(data) {
147
+ return (0, configuration_1.format)(data.Variables, this.Options.layout);
148
+ }
149
+ /**
150
+ * Flushes any buffered messages. Delegates to the queue's forceFlush so a
151
+ * caller ( eg. dispose or a test ) can await the drain.
152
+ */
153
+ async flush() {
154
+ await this.Queue.forceFlush();
155
+ }
156
+ forceFlush() {
157
+ return this.Queue ? this.Queue.forceFlush() : Promise.resolve();
158
+ }
159
+ /**
160
+ * Appends one batch as a single write, guarded by the write-lock ( the SAME
161
+ * lock rotation uses, so a rename can never race an append ). On failure the
162
+ * batch is requeued at the FRONT so nothing is lost ( never-drop, bounded by
163
+ * maxQueue ). This ALWAYS resolves ( never rejects ) so queue.shutdown() -
164
+ * driven by dispose() - never rejects.
165
+ */
166
+ async append(batch) {
167
+ await this.Ready.catch(() => {
168
+ /* init failed - error already recorded, skip appending */
169
+ });
170
+ if (!this.Fs) {
171
+ // init failed / fs unavailable - keep the batch for a later retry
172
+ this.Queue.requeueFront(batch);
166
173
  return;
167
174
  }
168
- if (this.Buffer.length >= this.Options.options.maxBufferSize) {
169
- this.Status = FileTargetStatus.PENDING;
170
- this.WriteBuffer = [...this.WriteBuffer, ...this.Buffer];
171
- this.Buffer = [];
172
- // write at end of nodejs event loop all buffered messages at once
173
- setImmediate(() => {
174
- this.flush();
175
- });
176
- }
177
- }
178
- archive() {
179
- const { ext } = path.parse(path.basename(this.Options.options.path));
180
- const aFiles = glob_1.default
181
- .sync(path.join(this.ArchiveDirPath, `archived_*{${ext},.gzip}`).replace(/\\/g, "/"))
182
- .map((f) => {
183
- return {
184
- name: f,
185
- stat: fs_1.default.statSync(f),
186
- };
187
- })
188
- .sort((a, b) => a.stat.mtime.getTime() - b.stat.mtime.getTime());
189
- const lFiles = glob_1.default
190
- .sync(path.join(this.LogDirPath, `*${ext}`).replace(/\\/g, "/"))
191
- .map((f) => {
192
- return {
193
- name: f,
194
- stat: fs_1.default.statSync(f),
195
- };
196
- })
197
- .sort((a, b) => a.stat.mtime.getTime() - b.stat.mtime.getTime());
198
- // clear archived files above limit
199
- if (aFiles.length > this.Options.options.maxArchiveFiles) {
200
- for (let i = 0; i < aFiles.length - this.Options.options.maxArchiveFiles; i++) {
201
- fs_1.default.unlink(aFiles[i].name, (err) => {
202
- if (err) {
203
- this.Log.error(err, `Cannot delete archived file at path ${aFiles[i - 1].name}`);
204
- }
205
- else {
206
- this.Log.info(`Deleted archived file at path ${aFiles[i].name}`);
207
- }
208
- });
175
+ await this.withWriteLock(async () => {
176
+ const path = this.activePath();
177
+ try {
178
+ await this.Fs.append(path, batch.join(os_1.EOL) + os_1.EOL);
179
+ this.HasError = false;
180
+ this.Error = null;
181
+ // batch appended successfully - allow the next overflow episode to warn again
182
+ this.Overflowed = false;
183
+ }
184
+ catch (err) {
185
+ this.HasError = true;
186
+ this.Error = err;
187
+ this.Log.error(err, `Cannot write log messages to file target at path ${path}`);
188
+ // restore the batch in front of anything queued meanwhile - never drop.
189
+ // the queue caps at maxQueue, dropping the oldest if the sink stays down.
190
+ this.Queue.requeueFront(batch);
209
191
  }
210
- }
211
- // now move log files that are above limited file size or old
212
- const filesToArchive = lFiles.filter((x) => {
213
- return x.stat.size > this.Options.options.maxSize || lFiles.indexOf(x) <= lFiles.length - 2;
214
192
  });
215
- if (filesToArchive.length === 0) {
216
- this.ArchiveStatus = FileTargetStatus.IDLE;
217
- }
218
- for (let i = 0; i < filesToArchive.length; i++) {
219
- const { name, ext } = path.parse(path.basename(lFiles[i].name));
220
- // get number of files with same name, eg. during a day, multiple log files can be produced
221
- const lArchiFiles = glob_1.default.sync(path.join(this.ArchiveDirPath, `archived_${name}*{${ext},.gzip}`).replace(/\\/g, "/"));
222
- const fIndex = lodash_1.default.max(lArchiFiles.map((f) => {
223
- const result = [...f.matchAll(/(\d+)(\.txt|\.gzip)/gm)];
224
- if (result && result.length > 0) {
225
- return parseInt(result[0][1]);
226
- }
227
- return 0;
228
- }));
229
- const archPath = path.join(this.ArchiveDirPath, `archived_${name}_${(fIndex ?? 0) + 1}${ext}`);
230
- fs_1.default.rename(lFiles[i].name, archPath, (err) => {
231
- if (err) {
232
- this.Log.error(err, `Cannot move log file ${name} to archive at path ${archPath}`);
233
- return;
234
- }
235
- if (this.Options.options.compress) {
236
- this.Log.trace(`Compressing archive log at path ${archPath}`);
237
- const zippedPath = path.join(this.ArchiveDirPath, `archived_${name}_${lArchiFiles.length + 1}${ext}.gzip`);
238
- const zip = zlib.createGzip();
239
- const read = fs_1.default.createReadStream(archPath);
240
- const write = fs_1.default.createWriteStream(zippedPath);
241
- (0, stream_1.pipeline)(read, zip, write, (err) => {
242
- if (err) {
243
- this.Log.error(err, `Cannot compress archived file at path ${archPath}`);
244
- fs_1.default.unlink(zippedPath, () => {
245
- return;
246
- });
247
- return;
248
- }
249
- this.Log.info(`Succesyfully compressed archive log at path ${zippedPath}`);
250
- fs_1.default.unlink(archPath, (err) => {
251
- if (err) {
252
- this.Log.error(err, `Cannot delete archived log after compression at path ${archPath}`);
253
- }
254
- });
255
- this.ArchiveStatus = FileTargetStatus.IDLE;
256
- });
257
- }
258
- else {
259
- this.ArchiveStatus = FileTargetStatus.IDLE;
260
- }
261
- });
262
- }
193
+ }
194
+ async dispose() {
195
+ this.Disposed = true;
196
+ // stops the flush timer and performs a final flush of anything buffered
197
+ await this.Queue.shutdown();
198
+ this.ArchiveService?.stop();
199
+ }
200
+ /**
201
+ * Runs `fn` under the shared write-lock. Flush and rotation both go through
202
+ * here, so a rename can never overlap an append.
203
+ */
204
+ withWriteLock(fn) {
205
+ const run = this.WriteLock.then(() => fn());
206
+ // keep the chain alive on failure so the lock never deadlocks
207
+ this.WriteLock = run.catch(() => undefined);
208
+ return run;
209
+ }
210
+ /**
211
+ * Active log path relative to the fs provider base path. Recomputed each call
212
+ * so dynamic ( eg. date-based ) paths work.
213
+ */
214
+ activePath() {
215
+ const p = (0, configuration_1.format)({ logger: this.Options.name }, this.Options.options.path);
216
+ return this.normalize(p);
217
+ }
218
+ /**
219
+ * Normalizes a configured path to forward slashes and strips a leading
220
+ * separator. Paths are interpreted relative to the fs provider base path -
221
+ * the provider itself sandboxes and resolves them, so we only canonicalize
222
+ * separators here.
223
+ */
224
+ normalize(p) {
225
+ return p.replace(/\\/g, "/").replace(/^\/+/, "");
263
226
  }
264
227
  };
265
228
  exports.FileTarget = FileTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"FileTarget.js","sourceRoot":"","sources":["../../../src/targets/FileTarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileTarget.js","sourceRoot":"","sources":["../../../src/targets/FileTarget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ILogEntry } from "@spinajs/log-common";
2
+ import { FileTarget } from "./FileTarget.js";
3
+ /**
4
+ * Emits newline-delimited JSON ( NDJSON ) to a file through the FileTarget
5
+ * pipeline ( batched append, write-lock, rotation, retention, zip ): one
6
+ * structured JSON object per log entry so log collectors ( Loki, Elastic,
7
+ * Datadog ) can index fields directly rather than regex-parsing a layout.
8
+ *
9
+ * It subclasses the concrete FileTarget and overrides ONLY the per-entry
10
+ * serialization, reusing IFileTargetOptions unchanged. The inherited `layout`
11
+ * option is intentionally IGNORED ( JSON, not a string layout ). `time` is
12
+ * event-time: it is stamped in formatEntry, which runs in write() before the
13
+ * entry is buffered, so it reflects when the event was logged, not when the
14
+ * batch is flushed to disk.
15
+ */
16
+ export declare class JsonFileTarget extends FileTarget {
17
+ protected formatEntry(data: ILogEntry): string;
18
+ }
19
+ //# sourceMappingURL=JsonFileTarget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonFileTarget.d.ts","sourceRoot":"","sources":["../../../src/targets/JsonFileTarget.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,qBAEa,cAAe,SAAQ,UAAU;IAC5C,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAW/C"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.JsonFileTarget = void 0;
10
+ const di_1 = require("@spinajs/di");
11
+ const log_common_1 = require("@spinajs/log-common");
12
+ const FileTarget_js_1 = require("./FileTarget.js");
13
+ /**
14
+ * Emits newline-delimited JSON ( NDJSON ) to a file through the FileTarget
15
+ * pipeline ( batched append, write-lock, rotation, retention, zip ): one
16
+ * structured JSON object per log entry so log collectors ( Loki, Elastic,
17
+ * Datadog ) can index fields directly rather than regex-parsing a layout.
18
+ *
19
+ * It subclasses the concrete FileTarget and overrides ONLY the per-entry
20
+ * serialization, reusing IFileTargetOptions unchanged. The inherited `layout`
21
+ * option is intentionally IGNORED ( JSON, not a string layout ). `time` is
22
+ * event-time: it is stamped in formatEntry, which runs in write() before the
23
+ * entry is buffered, so it reflects when the event was logged, not when the
24
+ * batch is flushed to disk.
25
+ */
26
+ let JsonFileTarget = class JsonFileTarget extends FileTarget_js_1.FileTarget {
27
+ formatEntry(data) {
28
+ // data.Variables already carries level ( uppercase string ), logger,
29
+ // message, a structured error ( from the serializer registry ) and any
30
+ // merged fields. safeStringify / JSON.stringify naturally omit undefined
31
+ // ( eg. error when absent ).
32
+ return (0, log_common_1.safeStringify)({
33
+ time: new Date().toISOString(),
34
+ severityNumber: log_common_1.LogLevelToSeverityNumber[data.Level],
35
+ ...data.Variables,
36
+ });
37
+ }
38
+ };
39
+ exports.JsonFileTarget = JsonFileTarget;
40
+ exports.JsonFileTarget = JsonFileTarget = __decorate([
41
+ (0, di_1.PerInstanceCheck)(),
42
+ (0, di_1.Injectable)("JsonFileTarget")
43
+ ], JsonFileTarget);
44
+ //# sourceMappingURL=JsonFileTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonFileTarget.js","sourceRoot":"","sources":["../../../src/targets/JsonFileTarget.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oCAA2D;AAC3D,oDAAyF;AAEzF,mDAA6C;AAE7C;;;;;;;;;;;;GAYG;AAGI,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,0BAAU;IAClC,WAAW,CAAC,IAAe;QACnC,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,6BAA6B;QAC7B,OAAO,IAAA,0BAAa,EAAC;YACnB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,cAAc,EAAE,qCAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YACpD,GAAG,IAAI,CAAC,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAZY,wCAAc;yBAAd,cAAc;IAF1B,IAAA,qBAAgB,GAAE;IAClB,IAAA,eAAU,EAAC,gBAAgB,CAAC;GAChB,cAAc,CAY1B"}
@@ -0,0 +1,27 @@
1
+ import { ICommonTargetOptions, ILogEntry, LogTarget } from "@spinajs/log-common";
2
+ /**
3
+ * Emits NDJSON ( newline-delimited JSON ) to stdout for machine ingestion:
4
+ * one structured JSON object per log entry instead of a formatted string, so
5
+ * log collectors ( Loki, Elastic, Datadog, container stdout ) can index fields
6
+ * directly rather than regex-parsing a layout.
7
+ *
8
+ * The inherited `layout` option is intentionally IGNORED - JSON is not a string
9
+ * layout. `time` is stamped at write; because this target is synchronous /
10
+ * unbuffered that is ~event time. An event-time-stamped, file-backed variant
11
+ * will come with the batching base in a later phase.
12
+ */
13
+ /**
14
+ * Options for {@link JsonTarget}.
15
+ */
16
+ export interface IJsonTargetOptions extends ICommonTargetOptions {
17
+ /**
18
+ * Which stream to write to. A single stream is the 12-factor norm for machine
19
+ * logs. Default is "stdout".
20
+ */
21
+ stream?: "stdout" | "stderr";
22
+ }
23
+ export declare class JsonTarget extends LogTarget<IJsonTargetOptions> {
24
+ constructor(options: IJsonTargetOptions);
25
+ write(data: ILogEntry): void;
26
+ }
27
+ //# sourceMappingURL=JsonTarget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonTarget.d.ts","sourceRoot":"","sources":["../../../src/targets/JsonTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAA4B,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAG1H;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B;AAED,qBAEa,UAAW,SAAQ,SAAS,CAAC,kBAAkB,CAAC;gBAC/C,OAAO,EAAE,kBAAkB;IAMhC,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAoBpC"}