@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
@@ -0,0 +1,10 @@
1
+ export * from "./context.js";
2
+ export * from "./archive-strategy.js";
3
+ export * from "./retention-strategy.js";
4
+ export * from "./LogArchiveService.js";
5
+ export * from "./strategies/util.js";
6
+ export * from "./strategies/SizeLogArchiveStrategy.js";
7
+ export * from "./strategies/CronLogArchiveStrategy.js";
8
+ export * from "./strategies/CountLogRetentionStrategy.js";
9
+ export * from "./strategies/AgeLogRetentionStrategy.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/archive/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from "./context.js";
2
+ export * from "./archive-strategy.js";
3
+ export * from "./retention-strategy.js";
4
+ export * from "./LogArchiveService.js";
5
+ export * from "./strategies/util.js";
6
+ export * from "./strategies/SizeLogArchiveStrategy.js";
7
+ export * from "./strategies/CronLogArchiveStrategy.js";
8
+ export * from "./strategies/CountLogRetentionStrategy.js";
9
+ export * from "./strategies/AgeLogRetentionStrategy.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/archive/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Log } from "@spinajs/log-common";
2
+ import { ILogArchiveContext } from "./context.js";
3
+ /**
4
+ * Retention policy for archived log files. Decides WHICH archives are deleted
5
+ * after a rotation ( eg. keep newest N, drop older than maxAge ).
6
+ *
7
+ * Retention strategies are composable - a file target applies a LIST of them in
8
+ * sequence, so count + age can be combined. Each concrete strategy is
9
+ * `@NewInstance()` to keep per-target state isolated, mirroring the fs cleanup
10
+ * strategies.
11
+ */
12
+ export declare abstract class LogRetentionStrategy {
13
+ protected Logger: Log;
14
+ /**
15
+ * Removes archives from `ctx.archiveDir` according to the strategy policy.
16
+ *
17
+ * @param ctx archive context of the file target
18
+ */
19
+ abstract prune(ctx: ILogArchiveContext): Promise<void>;
20
+ /**
21
+ * Single prune guarded against errors so one failing retention strategy never
22
+ * aborts the rest of the retention list or the rotation routine.
23
+ */
24
+ safePrune(ctx: ILogArchiveContext): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=retention-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-strategy.d.ts","sourceRoot":"","sources":["../../../src/archive/retention-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;GAQG;AACH,8BAAsB,oBAAoB;IAExC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB;;;;OAIG;aACa,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7D;;;OAGG;IACU,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAO/D"}
@@ -0,0 +1,38 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Logger, Log } from "@spinajs/log-common";
11
+ /**
12
+ * Retention policy for archived log files. Decides WHICH archives are deleted
13
+ * after a rotation ( eg. keep newest N, drop older than maxAge ).
14
+ *
15
+ * Retention strategies are composable - a file target applies a LIST of them in
16
+ * sequence, so count + age can be combined. Each concrete strategy is
17
+ * `@NewInstance()` to keep per-target state isolated, mirroring the fs cleanup
18
+ * strategies.
19
+ */
20
+ export class LogRetentionStrategy {
21
+ /**
22
+ * Single prune guarded against errors so one failing retention strategy never
23
+ * aborts the rest of the retention list or the rotation routine.
24
+ */
25
+ async safePrune(ctx) {
26
+ try {
27
+ await this.prune(ctx);
28
+ }
29
+ catch (err) {
30
+ this.Logger.warn(`Log retention for target ${ctx.options.path} failed: ${err.message}`);
31
+ }
32
+ }
33
+ }
34
+ __decorate([
35
+ Logger("LogFileTarget"),
36
+ __metadata("design:type", Log)
37
+ ], LogRetentionStrategy.prototype, "Logger", void 0);
38
+ //# sourceMappingURL=retention-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-strategy.js","sourceRoot":"","sources":["../../../src/archive/retention-strategy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;;;;;;GAQG;AACH,MAAM,OAAgB,oBAAoB;IAWxC;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,GAAuB;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,GAAG,CAAC,OAAO,CAAC,IAAI,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;CACF;AApBW;IADT,MAAM,CAAC,eAAe,CAAC;8BACN,GAAG;oDAAC"}
@@ -0,0 +1,10 @@
1
+ import { LogRetentionStrategy } from "../retention-strategy.js";
2
+ import { ILogArchiveContext } from "../context.js";
3
+ /**
4
+ * Deletes archives older than `maxAge` seconds ( from the logger.file config
5
+ * defaults ). Age is taken from the archive modification time.
6
+ */
7
+ export declare class AgeLogRetentionStrategy extends LogRetentionStrategy {
8
+ prune(ctx: ILogArchiveContext): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=AgeLogRetentionStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgeLogRetentionStrategy.d.ts","sourceRoot":"","sources":["../../../../src/archive/strategies/AgeLogRetentionStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD;;;GAGG;AACH,qBAEa,uBAAwB,SAAQ,oBAAoB;IAClD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB3D"}
@@ -0,0 +1,43 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable, NewInstance } from "@spinajs/di";
8
+ import { DateTime } from "luxon";
9
+ import { LogRetentionStrategy } from "../retention-strategy.js";
10
+ import { listArchives } from "./util.js";
11
+ /**
12
+ * Deletes archives older than `maxAge` seconds ( from the logger.file config
13
+ * defaults ). Age is taken from the archive modification time.
14
+ */
15
+ let AgeLogRetentionStrategy = class AgeLogRetentionStrategy extends LogRetentionStrategy {
16
+ async prune(ctx) {
17
+ // maxAge is always populated from the config defaults ( see logger.file )
18
+ const maxAge = ctx.options.maxAge;
19
+ const now = DateTime.now();
20
+ const archives = await listArchives(ctx);
21
+ for (const a of archives) {
22
+ const ts = a.stat.ModifiedTime;
23
+ if (!ts || !ts.isValid) {
24
+ continue;
25
+ }
26
+ if (now.diff(ts, "seconds").seconds > maxAge) {
27
+ try {
28
+ this.Logger.trace(`Deleting archive ${a.path} ( older than ${maxAge}s )`);
29
+ await ctx.archiveFs.rm(a.path);
30
+ }
31
+ catch (err) {
32
+ this.Logger.warn(`Cannot delete archive ${a.path}: ${err.message}`);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ };
38
+ AgeLogRetentionStrategy = __decorate([
39
+ Injectable(LogRetentionStrategy),
40
+ NewInstance()
41
+ ], AgeLogRetentionStrategy);
42
+ export { AgeLogRetentionStrategy };
43
+ //# sourceMappingURL=AgeLogRetentionStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgeLogRetentionStrategy.js","sourceRoot":"","sources":["../../../../src/archive/strategies/AgeLogRetentionStrategy.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;GAGG;AAGI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,KAAK,CAAC,KAAK,CAAC,GAAuB;QACxC,0EAA0E;QAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAgB,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAEzC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,IAAI,iBAAiB,MAAM,KAAK,CAAC,CAAC;oBAC1E,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAxBY,uBAAuB;IAFnC,UAAU,CAAC,oBAAoB,CAAC;IAChC,WAAW,EAAE;GACD,uBAAuB,CAwBnC"}
@@ -0,0 +1,10 @@
1
+ import { LogRetentionStrategy } from "../retention-strategy.js";
2
+ import { ILogArchiveContext } from "../context.js";
3
+ /**
4
+ * Keeps the newest N archives ( `maxArchiveFiles`, from the logger.file config
5
+ * defaults ) and deletes the oldest, ordered by modification time.
6
+ */
7
+ export declare class CountLogRetentionStrategy extends LogRetentionStrategy {
8
+ prune(ctx: ILogArchiveContext): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=CountLogRetentionStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountLogRetentionStrategy.d.ts","sourceRoot":"","sources":["../../../../src/archive/strategies/CountLogRetentionStrategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD;;;GAGG;AACH,qBAEa,yBAA0B,SAAQ,oBAAoB;IACpD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB3D"}
@@ -0,0 +1,39 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable, NewInstance } from "@spinajs/di";
8
+ import { LogRetentionStrategy } from "../retention-strategy.js";
9
+ import { listArchives } from "./util.js";
10
+ /**
11
+ * Keeps the newest N archives ( `maxArchiveFiles`, from the logger.file config
12
+ * defaults ) and deletes the oldest, ordered by modification time.
13
+ */
14
+ let CountLogRetentionStrategy = class CountLogRetentionStrategy extends LogRetentionStrategy {
15
+ async prune(ctx) {
16
+ const keep = ctx.options.maxArchiveFiles;
17
+ // newest last ( ascending by ModifiedTime )
18
+ const archives = await listArchives(ctx);
19
+ if (archives.length <= keep) {
20
+ return;
21
+ }
22
+ const toDelete = archives.slice(0, archives.length - keep);
23
+ for (const a of toDelete) {
24
+ try {
25
+ this.Logger.trace(`Deleting archive ${a.path} ( over count limit ${keep} )`);
26
+ await ctx.archiveFs.rm(a.path);
27
+ }
28
+ catch (err) {
29
+ this.Logger.warn(`Cannot delete archive ${a.path}: ${err.message}`);
30
+ }
31
+ }
32
+ }
33
+ };
34
+ CountLogRetentionStrategy = __decorate([
35
+ Injectable(LogRetentionStrategy),
36
+ NewInstance()
37
+ ], CountLogRetentionStrategy);
38
+ export { CountLogRetentionStrategy };
39
+ //# sourceMappingURL=CountLogRetentionStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountLogRetentionStrategy.js","sourceRoot":"","sources":["../../../../src/archive/strategies/CountLogRetentionStrategy.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;GAGG;AAGI,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,oBAAoB;IAC1D,KAAK,CAAC,KAAK,CAAC,GAAuB;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;QAEzC,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAE3D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,IAAI,uBAAuB,IAAI,IAAI,CAAC,CAAC;gBAC7E,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAtBY,yBAAyB;IAFrC,UAAU,CAAC,oBAAoB,CAAC;IAChC,WAAW,EAAE;GACD,yBAAyB,CAsBrC"}
@@ -0,0 +1,15 @@
1
+ import { CronJob } from "cron";
2
+ import { LogArchiveStrategy } from "../archive-strategy.js";
3
+ import { ILogArchiveContext } from "../context.js";
4
+ /**
5
+ * Rotates the active log file on a cron schedule taken from the `rotate`
6
+ * option ( 6-field with seconds supported, eg. '0 0 1 * * *' = 1am daily ).
7
+ * The expression is required - creation fails without it, like fs
8
+ * CronTempCleanupStrategy.
9
+ */
10
+ export declare class CronLogArchiveStrategy extends LogArchiveStrategy {
11
+ protected cronJob: CronJob | null;
12
+ start(ctx: ILogArchiveContext): void;
13
+ stop(): void;
14
+ }
15
+ //# sourceMappingURL=CronLogArchiveStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronLogArchiveStrategy.d.ts","sourceRoot":"","sources":["../../../../src/archive/strategies/CronLogArchiveStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;GAKG;AACH,qBAEa,sBAAuB,SAAQ,kBAAkB;IAC5D,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAElC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IA0BpC,IAAI,IAAI,IAAI;CAMpB"}
@@ -0,0 +1,49 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable, NewInstance } from "@spinajs/di";
8
+ import { InvalidOption } from "@spinajs/exceptions";
9
+ import { CronJob } from "cron";
10
+ import { LogArchiveStrategy } from "../archive-strategy.js";
11
+ /**
12
+ * Rotates the active log file on a cron schedule taken from the `rotate`
13
+ * option ( 6-field with seconds supported, eg. '0 0 1 * * *' = 1am daily ).
14
+ * The expression is required - creation fails without it, like fs
15
+ * CronTempCleanupStrategy.
16
+ */
17
+ let CronLogArchiveStrategy = class CronLogArchiveStrategy extends LogArchiveStrategy {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.cronJob = null;
21
+ }
22
+ start(ctx) {
23
+ if (!ctx.options.rotate) {
24
+ throw new InvalidOption(`Log target ${ctx.options.path} uses CronLogArchiveStrategy but 'rotate' cron expression is not set`);
25
+ }
26
+ this.stop();
27
+ // CronJob ctor throws on invalid expression - wrap for a clearer error
28
+ try {
29
+ this.cronJob = new CronJob(ctx.options.rotate, () => {
30
+ void this.triggerRotation(ctx);
31
+ }, null, true);
32
+ }
33
+ catch (err) {
34
+ throw new InvalidOption(`Log target ${ctx.options.path} has invalid rotate cron expression '${ctx.options.rotate}': ${err.message}`);
35
+ }
36
+ }
37
+ stop() {
38
+ if (this.cronJob) {
39
+ this.cronJob.stop();
40
+ this.cronJob = null;
41
+ }
42
+ }
43
+ };
44
+ CronLogArchiveStrategy = __decorate([
45
+ Injectable(LogArchiveStrategy),
46
+ NewInstance()
47
+ ], CronLogArchiveStrategy);
48
+ export { CronLogArchiveStrategy };
49
+ //# sourceMappingURL=CronLogArchiveStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronLogArchiveStrategy.js","sourceRoot":"","sources":["../../../../src/archive/strategies/CronLogArchiveStrategy.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;GAKG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,kBAAkB;IAAvD;;QACK,YAAO,GAAmB,IAAI,CAAC;IAkC3C,CAAC;IAhCQ,KAAK,CAAC,GAAuB;QAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,aAAa,CACrB,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,sEAAsE,CACrG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,uEAAuE;QACvE,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CACxB,GAAG,CAAC,OAAO,CAAC,MAAM,EAClB,GAAG,EAAE;gBACH,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,EACD,IAAI,EACJ,IAAI,CACL,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CACrB,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,wCAAwC,GAAG,CAAC,OAAO,CAAC,MAAM,MAAO,GAAa,CAAC,OAAO,EAAE,CACvH,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF,CAAA;AAnCY,sBAAsB;IAFlC,UAAU,CAAC,kBAAkB,CAAC;IAC9B,WAAW,EAAE;GACD,sBAAsB,CAmClC"}
@@ -0,0 +1,18 @@
1
+ import { LogArchiveStrategy } from "../archive-strategy.js";
2
+ import { ILogArchiveContext } from "../context.js";
3
+ /**
4
+ * Rotates the active log file when its size exceeds `maxSize`, checked every
5
+ * `archiveInterval` seconds ( both resolved from the logger.file config
6
+ * defaults, overridable per target ).
7
+ */
8
+ export declare class SizeLogArchiveStrategy extends LogArchiveStrategy {
9
+ protected timer: NodeJS.Timeout | null;
10
+ start(ctx: ILogArchiveContext): void;
11
+ stop(): void;
12
+ /**
13
+ * Rotates only when the active file exists AND is over the size limit. A
14
+ * missing active file ( nothing written yet ) is not an error.
15
+ */
16
+ protected check(ctx: ILogArchiveContext): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=SizeLogArchiveStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SizeLogArchiveStrategy.d.ts","sourceRoot":"","sources":["../../../../src/archive/strategies/SizeLogArchiveStrategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AACH,qBAEa,sBAAuB,SAAQ,kBAAkB;IAC5D,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IAEvC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAWpC,IAAI,IAAI,IAAI;IAOnB;;;OAGG;cACa,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB9D"}
@@ -0,0 +1,60 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable, NewInstance } from "@spinajs/di";
8
+ import { LogArchiveStrategy } from "../archive-strategy.js";
9
+ /**
10
+ * Rotates the active log file when its size exceeds `maxSize`, checked every
11
+ * `archiveInterval` seconds ( both resolved from the logger.file config
12
+ * defaults, overridable per target ).
13
+ */
14
+ let SizeLogArchiveStrategy = class SizeLogArchiveStrategy extends LogArchiveStrategy {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.timer = null;
18
+ }
19
+ start(ctx) {
20
+ // never leak a previous timer on repeated start
21
+ this.stop();
22
+ const interval = ctx.options.archiveInterval * 1000;
23
+ this.timer = setInterval(() => {
24
+ void this.check(ctx);
25
+ }, interval);
26
+ }
27
+ stop() {
28
+ if (this.timer) {
29
+ clearInterval(this.timer);
30
+ this.timer = null;
31
+ }
32
+ }
33
+ /**
34
+ * Rotates only when the active file exists AND is over the size limit. A
35
+ * missing active file ( nothing written yet ) is not an error.
36
+ */
37
+ async check(ctx) {
38
+ try {
39
+ if (!(await ctx.fs.exists(ctx.activePath))) {
40
+ return;
41
+ }
42
+ const stat = await ctx.fs.stat(ctx.activePath);
43
+ const maxSize = ctx.options.maxSize;
44
+ const size = stat.Size ?? 0;
45
+ if (size > maxSize) {
46
+ this.Logger.trace(`Active log ${ctx.activePath} size ${size} exceeds ${maxSize}, rotating`);
47
+ await this.triggerRotation(ctx);
48
+ }
49
+ }
50
+ catch (err) {
51
+ this.Logger.warn(`Size check for log target ${ctx.activePath} failed: ${err.message}`);
52
+ }
53
+ }
54
+ };
55
+ SizeLogArchiveStrategy = __decorate([
56
+ Injectable(LogArchiveStrategy),
57
+ NewInstance()
58
+ ], SizeLogArchiveStrategy);
59
+ export { SizeLogArchiveStrategy };
60
+ //# sourceMappingURL=SizeLogArchiveStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SizeLogArchiveStrategy.js","sourceRoot":"","sources":["../../../../src/archive/strategies/SizeLogArchiveStrategy.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;GAIG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,kBAAkB;IAAvD;;QACK,UAAK,GAA0B,IAAI,CAAC;IA0ChD,CAAC;IAxCQ,KAAK,CAAC,GAAuB;QAClC,gDAAgD;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;QAEpD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAEM,IAAI;QACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,KAAK,CAAC,GAAuB;QAC3C,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,UAAU,SAAS,IAAI,YAAY,OAAO,YAAY,CAAC,CAAC;gBAC5F,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,UAAU,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CACF,CAAA;AA3CY,sBAAsB;IAFlC,UAAU,CAAC,kBAAkB,CAAC;IAC9B,WAAW,EAAE;GACD,sBAAsB,CA2ClC"}
@@ -0,0 +1,28 @@
1
+ import { IStat } from "@spinajs/fs";
2
+ import { ILogArchiveContext } from "../context.js";
3
+ /**
4
+ * Prefix every archived file name gets. Only files under `archiveDir` starting
5
+ * with this prefix are considered archives ( so the active log dir, when it is
6
+ * the same directory as the archive dir, is not touched ).
7
+ */
8
+ export declare const ARCHIVE_PREFIX = "archived_";
9
+ export interface IArchiveEntry {
10
+ /**
11
+ * Path of the archive relative to `archiveFs` base path.
12
+ */
13
+ path: string;
14
+ stat: IStat;
15
+ }
16
+ /**
17
+ * Joins archive dir + file name with forward slashes. fs providers resolve
18
+ * paths against their base path and normalize separators, so a posix join keeps
19
+ * behaviour identical across platforms.
20
+ */
21
+ export declare function archivePath(ctx: ILogArchiveContext, name: string): string;
22
+ /**
23
+ * Lists archive files in `ctx.archiveDir` on `ctx.archiveFs`, sorted ascending
24
+ * by modification time ( oldest first, newest last ). Only files carrying the
25
+ * archive prefix are returned; directories and unrelated files are ignored.
26
+ */
27
+ export declare function listArchives(ctx: ILogArchiveContext): Promise<IArchiveEntry[]>;
28
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/archive/strategies/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAmCpF"}
@@ -0,0 +1,54 @@
1
+ import { posix } from "path";
2
+ /**
3
+ * Prefix every archived file name gets. Only files under `archiveDir` starting
4
+ * with this prefix are considered archives ( so the active log dir, when it is
5
+ * the same directory as the archive dir, is not touched ).
6
+ */
7
+ export const ARCHIVE_PREFIX = "archived_";
8
+ /**
9
+ * Joins archive dir + file name with forward slashes. fs providers resolve
10
+ * paths against their base path and normalize separators, so a posix join keeps
11
+ * behaviour identical across platforms.
12
+ */
13
+ export function archivePath(ctx, name) {
14
+ return ctx.archiveDir ? posix.join(ctx.archiveDir, name) : name;
15
+ }
16
+ /**
17
+ * Lists archive files in `ctx.archiveDir` on `ctx.archiveFs`, sorted ascending
18
+ * by modification time ( oldest first, newest last ). Only files carrying the
19
+ * archive prefix are returned; directories and unrelated files are ignored.
20
+ */
21
+ export async function listArchives(ctx) {
22
+ let names;
23
+ try {
24
+ names = await ctx.archiveFs.list(ctx.archiveDir || "/");
25
+ }
26
+ catch {
27
+ // archive dir may not exist yet ( nothing rotated )
28
+ return [];
29
+ }
30
+ const entries = [];
31
+ for (const name of names) {
32
+ if (!name.startsWith(ARCHIVE_PREFIX)) {
33
+ continue;
34
+ }
35
+ const p = archivePath(ctx, name);
36
+ try {
37
+ const stat = await ctx.archiveFs.stat(p);
38
+ if (stat.IsDirectory) {
39
+ continue;
40
+ }
41
+ entries.push({ path: p, stat });
42
+ }
43
+ catch {
44
+ // stat can fail on a file removed concurrently - skip it
45
+ }
46
+ }
47
+ entries.sort((a, b) => {
48
+ const at = a.stat.ModifiedTime?.toMillis() ?? 0;
49
+ const bt = b.stat.ModifiedTime?.toMillis() ?? 0;
50
+ return at - bt;
51
+ });
52
+ return entries;
53
+ }
54
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/archive/strategies/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAU1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAuB,EAAE,IAAY;IAC/D,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAuB;IACxD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,YAAY,EAAM,MAAM,aAAa,CAAC;AA4B3D,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI;CAczB"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,YAAY,EAAM,MAAM,aAAa,CAAC;AAkC3D,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI;CAmCzB"}
@@ -6,7 +6,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { Configuration } from "@spinajs/configuration";
8
8
  import { Injectable, Bootstrapper, DI } from "@spinajs/di";
9
- import { Log } from "@spinajs/log-common";
9
+ import { Log, setLogContextProvider } from "@spinajs/log-common";
10
+ import { LogContext, scalarContext } from "./context.js";
11
+ import { wirePerfScope } from "./perf.js";
10
12
  import CONFIGURATION_SCHEMA from "./schemas/log.configuration.js";
11
13
  const uncaughtExceptionHandler = (err) => {
12
14
  // if we have configuration resolved, we can assume that logger can read configuration
@@ -32,15 +34,36 @@ const unhandledRejection = (reason, p) => {
32
34
  console.error("Unhandled rejection: \n reason: " + reason.message + " \n stack:" + reason.stack);
33
35
  }
34
36
  };
37
+ // Guard so a double bootstrap ( eg. re-run in the same process ) does not
38
+ // register the beforeExit drain twice.
39
+ let beforeExitAttached = false;
35
40
  let LogBotstrapper = class LogBotstrapper extends Bootstrapper {
36
41
  bootstrap() {
37
42
  DI.register(CONFIGURATION_SCHEMA).asValue("__configurationSchema__");
43
+ // Best-effort teardown drain: on a CLEAN process exit, force-flush every
44
+ // logger's targets so buffered File / Loki / OTLP entries are written out.
45
+ // beforeExit does NOT run on hard exits ( process.exit / signals / crashes ),
46
+ // so this only catches clean drains. Node-only ( guard mirrors
47
+ // internal-logger ); do not double-register.
48
+ if (!beforeExitAttached && typeof process !== "undefined" && typeof process.on === "function") {
49
+ beforeExitAttached = true;
50
+ process.on("beforeExit", () => {
51
+ void Log.flushAll();
52
+ });
53
+ }
54
+ // Feed the ambient async-context store into every log entry ( merged at
55
+ // lowest precedence by createLogMessageObject ). LogContext resolves the
56
+ // same DI-singleton AsyncLocalStorage the http module runs per action, so
57
+ // logs inherit requestId / realIp / ... for free.
58
+ setLogContextProvider(() => scalarContext(LogContext.active()));
59
+ // Wire the per-request perf accumulator onto the same async store.
60
+ wirePerfScope();
38
61
  // check if we run tests,
39
62
  // hook for uncaughtException causes to not showing
40
63
  // mocha errors in console
41
64
  if (!process.env.TESTING) {
42
65
  process.removeListener("uncaughtException", uncaughtExceptionHandler);
43
- process.removeListener("unhandledRejection", uncaughtExceptionHandler);
66
+ process.removeListener("unhandledRejection", unhandledRejection);
44
67
  process.on("uncaughtException", uncaughtExceptionHandler);
45
68
  process.on("unhandledRejection", unhandledRejection);
46
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,gCAAgC,CAAC;AAElE,MAAM,wBAAwB,GAAG,CAAC,GAAU,EAAE,EAAE;IAC9C,sFAAsF;IACtF,wBAAwB;IACxB,wBAAwB;IACxB,IAAI,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,GAAG,CAAC,OAAO,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAa,EAAE,CAAmB,EAAE,EAAE;IAChE,sFAAsF;IACtF,wBAAwB;IACxB,wBAAwB;IACxB,IAAI,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,MAAe,EAAE,mCAAmC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;AACH,CAAC,CAAC;AAGK,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,YAAY;IACvC,SAAS;QACd,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAErE,yBAAyB;QACzB,mDAAmD;QACnD,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;YACtE,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;YAEvE,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;YAC1D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF,CAAA;AAfY,cAAc;IAD1B,UAAU,CAAC,YAAY,CAAC;GACZ,cAAc,CAe1B"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,oBAAoB,MAAM,gCAAgC,CAAC;AAElE,MAAM,wBAAwB,GAAG,CAAC,GAAU,EAAE,EAAE;IAC9C,sFAAsF;IACtF,wBAAwB;IACxB,wBAAwB;IACxB,IAAI,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,GAAG,CAAC,OAAO,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAa,EAAE,CAAmB,EAAE,EAAE;IAChE,sFAAsF;IACtF,wBAAwB;IACxB,wBAAwB;IACxB,IAAI,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,MAAe,EAAE,mCAAmC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;AACH,CAAC,CAAC;AAEF,0EAA0E;AAC1E,uCAAuC;AACvC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAGxB,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,YAAY;IACvC,SAAS;QACd,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAErE,yEAAyE;QACzE,2EAA2E;QAC3E,8EAA8E;QAC9E,+DAA+D;QAC/D,6CAA6C;QAC7C,IAAI,CAAC,kBAAkB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YAC9F,kBAAkB,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC5B,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,kDAAkD;QAClD,qBAAqB,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhE,mEAAmE;QACnE,aAAa,EAAE,CAAC;QAEhB,yBAAyB;QACzB,mDAAmD;QACnD,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;YACtE,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;YAEjE,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;YAC1D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF,CAAA;AApCY,cAAc;IAD1B,UAAU,CAAC,YAAY,CAAC;GACZ,cAAc,CAoC1B"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Best-effort caller-frame capture for the `${callsite}` layout variable.
3
+ *
4
+ * NLog gates stack-trace capture behind `StackTraceUsage` so that logging is
5
+ * zero-cost unless a target's layout actually references the caller. This
6
+ * mirrors that: {@link FrameworkLogger} only calls {@link captureCallsite}
7
+ * when some target's layout references `${callsite}`, so the `new Error()`
8
+ * ( the only cost here ) is never constructed otherwise.
9
+ *
10
+ * The parser is intentionally defensive - it must NEVER throw. Browser stack
11
+ * formats vary and V8's format is not guaranteed, so an unparseable stack just
12
+ * yields `""` rather than crashing a log call.
13
+ */
14
+ /**
15
+ * Walk the current stack and return the first frame OUTSIDE the log package -
16
+ * i.e. the user's call site - as `"basename:line"` ( e.g. `service.ts:42` ).
17
+ *
18
+ * Internal frames belonging to the logger itself ( `log.ts`, `callsite.ts`,
19
+ * the `log-common` package, `wrapWrite`, `createLogMessageObject` ) are skipped
20
+ * so the returned frame is the caller of `log.info(...)` / `log.error(...)`.
21
+ *
22
+ * Returns `""` when no frame can be parsed ( no stack, or an unrecognized
23
+ * stack format ). Best-effort by design.
24
+ */
25
+ export declare function captureCallsite(): string;
26
+ //# sourceMappingURL=callsite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callsite.d.ts","sourceRoot":"","sources":["../../src/callsite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAmCxC"}