@spinajs/log 2.0.480 → 2.0.482

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 +28 -0
  90. package/lib/cjs/perf/LogMetricSink.d.ts.map +1 -0
  91. package/lib/cjs/perf/LogMetricSink.js +120 -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 +28 -0
  240. package/lib/mjs/perf/LogMetricSink.d.ts.map +1 -0
  241. package/lib/mjs/perf/LogMetricSink.js +117 -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 +25 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogArchiveService.js","sourceRoot":"","sources":["../../../src/archive/LogArchiveService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Log } from "@spinajs/log-common";
2
+ import { ILogArchiveContext } from "./context.js";
3
+ /**
4
+ * Rotation policy for a file log target. Decides WHEN the active log file is
5
+ * rotated ( moved to the archive ) and owns its own schedule - the scheduling
6
+ * mechanism ( interval, cron, ... ) is strategy specific and implemented in
7
+ * `start` / `stop`.
8
+ *
9
+ * Mirrors the shape of fs `TempCleanupStrategy`: strategies hold per-target
10
+ * scheduling state, so implementations MUST be registered with `@NewInstance()`
11
+ * - otherwise a single instance would be shared between all file targets.
12
+ */
13
+ export declare abstract class LogArchiveStrategy {
14
+ protected Logger: Log;
15
+ /**
16
+ * Starts scheduled rotation. How rotations are scheduled is up to the
17
+ * strategy.
18
+ *
19
+ * @param ctx archive context of the file target
20
+ */
21
+ abstract start(ctx: ILogArchiveContext): void;
22
+ /**
23
+ * Stops scheduled rotation. Safe to call multiple times.
24
+ */
25
+ abstract stop(): void;
26
+ /**
27
+ * Single rotation trigger guarded against errors - a failed rotation ( disk
28
+ * full, remote backend down, ... ) must never crash the scheduler tick.
29
+ */
30
+ protected triggerRotation(ctx: ILogArchiveContext): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=archive-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-strategy.d.ts","sourceRoot":"","sources":["../../../src/archive/archive-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;GASG;AACH,8BAAsB,kBAAkB;IAEtC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB;;;;;OAKG;aACa,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAEpD;;OAEG;aACa,IAAI,IAAI,IAAI;IAE5B;;;OAGG;cACa,eAAe,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAOxE"}
@@ -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
+ 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
+ * Rotation policy for a file log target. Decides WHEN the active log file is
13
+ * rotated ( moved to the archive ) and owns its own schedule - the scheduling
14
+ * mechanism ( interval, cron, ... ) is strategy specific and implemented in
15
+ * `start` / `stop`.
16
+ *
17
+ * Mirrors the shape of fs `TempCleanupStrategy`: strategies hold per-target
18
+ * scheduling state, so implementations MUST be registered with `@NewInstance()`
19
+ * - otherwise a single instance would be shared between all file targets.
20
+ */
21
+ export class LogArchiveStrategy {
22
+ /**
23
+ * Single rotation trigger guarded against errors - a failed rotation ( disk
24
+ * full, remote backend down, ... ) must never crash the scheduler tick.
25
+ */
26
+ async triggerRotation(ctx) {
27
+ try {
28
+ await ctx.rotate();
29
+ }
30
+ catch (err) {
31
+ this.Logger.warn(`Log rotation for target ${ctx.options.path} failed: ${err.message}`);
32
+ }
33
+ }
34
+ }
35
+ __decorate([
36
+ Logger("LogFileTarget"),
37
+ __metadata("design:type", Log)
38
+ ], LogArchiveStrategy.prototype, "Logger", void 0);
39
+ //# sourceMappingURL=archive-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-strategy.js","sourceRoot":"","sources":["../../../src/archive/archive-strategy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;;;;;;;GASG;AACH,MAAM,OAAgB,kBAAkB;IAiBtC;;;OAGG;IACO,KAAK,CAAC,eAAe,CAAC,GAAuB;QACrD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,OAAO,CAAC,IAAI,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CACF;AA1BW;IADT,MAAM,CAAC,eAAe,CAAC;8BACN,GAAG;kDAAC"}
@@ -0,0 +1,50 @@
1
+ import { fs } from "@spinajs/fs";
2
+ import { Log, IFileTargetOptions } from "@spinajs/log-common";
3
+ /**
4
+ * Shared context handed to every archive / retention strategy.
5
+ *
6
+ * It exposes the filesystems and paths a strategy needs, plus the two
7
+ * cross-cutting hooks it must go through:
8
+ *
9
+ * - `rotate()` - perform a single rotation ( owned by LogArchiveService ),
10
+ * - `withWriteLock()` - run a critical section under the target write-lock so
11
+ * a rename never races an in-flight append.
12
+ */
13
+ export interface ILogArchiveContext {
14
+ /**
15
+ * Filesystem holding the ACTIVE log file.
16
+ */
17
+ fs: fs;
18
+ /**
19
+ * Filesystem archives ( rotated / zipped files ) are moved to. Defaults to
20
+ * the same provider as `fs`.
21
+ */
22
+ archiveFs: fs;
23
+ /**
24
+ * Path ( relative to `fs` base path ) of the active log file.
25
+ */
26
+ activePath: string;
27
+ /**
28
+ * Directory ( relative to `archiveFs` base path ) archives are stored in.
29
+ */
30
+ archiveDir: string;
31
+ /**
32
+ * Resolved file target options ( maxSize, maxAge, compress, ... ).
33
+ */
34
+ options: IFileTargetOptions["options"];
35
+ /**
36
+ * Target logger, used for diagnostics.
37
+ */
38
+ logger: Log;
39
+ /**
40
+ * Perform a single rotation of the active log file. Implemented by
41
+ * LogArchiveService - strategies call this from their schedule.
42
+ */
43
+ rotate(): Promise<void>;
44
+ /**
45
+ * Run `fn` under the target write-lock so it cannot overlap with an
46
+ * in-flight append / flush.
47
+ */
48
+ withWriteLock<T>(fn: () => Promise<T>): Promise<T>;
49
+ }
50
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/archive/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,EAAE,EAAE,EAAE,CAAC;IAEP;;;OAGG;IACH,SAAS,EAAE,EAAE,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEvC;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC;IAEZ;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/archive/context.ts"],"names":[],"mappings":""}
@@ -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"}