@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.
- package/README.md +744 -0
- package/lib/cjs/archive/LogArchiveService.d.ts +75 -0
- package/lib/cjs/archive/LogArchiveService.d.ts.map +1 -0
- package/lib/cjs/archive/LogArchiveService.js +189 -0
- package/lib/cjs/archive/LogArchiveService.js.map +1 -0
- package/lib/cjs/archive/archive-strategy.d.ts +32 -0
- package/lib/cjs/archive/archive-strategy.d.ts.map +1 -0
- package/lib/cjs/archive/archive-strategy.js +43 -0
- package/lib/cjs/archive/archive-strategy.js.map +1 -0
- package/lib/cjs/archive/context.d.ts +50 -0
- package/lib/cjs/archive/context.d.ts.map +1 -0
- package/lib/cjs/archive/context.js +3 -0
- package/lib/cjs/archive/context.js.map +1 -0
- package/lib/cjs/archive/index.d.ts +10 -0
- package/lib/cjs/archive/index.d.ts.map +1 -0
- package/lib/cjs/archive/index.js +26 -0
- package/lib/cjs/archive/index.js.map +1 -0
- package/lib/cjs/archive/retention-strategy.d.ts +26 -0
- package/lib/cjs/archive/retention-strategy.d.ts.map +1 -0
- package/lib/cjs/archive/retention-strategy.js +42 -0
- package/lib/cjs/archive/retention-strategy.js.map +1 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js +46 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js +42 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js +52 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js +63 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/util.d.ts +28 -0
- package/lib/cjs/archive/strategies/util.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/util.js +59 -0
- package/lib/cjs/archive/strategies/util.js.map +1 -0
- package/lib/cjs/bootstrap.d.ts.map +1 -1
- package/lib/cjs/bootstrap.js +24 -1
- package/lib/cjs/bootstrap.js.map +1 -1
- package/lib/cjs/callsite.d.ts +26 -0
- package/lib/cjs/callsite.d.ts.map +1 -0
- package/lib/cjs/callsite.js +60 -0
- package/lib/cjs/callsite.js.map +1 -0
- package/lib/cjs/config/log.d.ts +96 -0
- package/lib/cjs/config/log.d.ts.map +1 -0
- package/lib/cjs/config/log.js +75 -0
- package/lib/cjs/config/log.js.map +1 -0
- package/lib/cjs/context.browser.d.ts +46 -0
- package/lib/cjs/context.browser.d.ts.map +1 -0
- package/lib/cjs/context.browser.js +85 -0
- package/lib/cjs/context.browser.js.map +1 -0
- package/lib/cjs/context.d.ts +61 -0
- package/lib/cjs/context.d.ts.map +1 -0
- package/lib/cjs/context.js +92 -0
- package/lib/cjs/context.js.map +1 -0
- package/lib/cjs/filters/LevelFilter.d.ts +24 -0
- package/lib/cjs/filters/LevelFilter.d.ts.map +1 -0
- package/lib/cjs/filters/LevelFilter.js +39 -0
- package/lib/cjs/filters/LevelFilter.js.map +1 -0
- package/lib/cjs/filters/MatchFilter.d.ts +30 -0
- package/lib/cjs/filters/MatchFilter.d.ts.map +1 -0
- package/lib/cjs/filters/MatchFilter.js +65 -0
- package/lib/cjs/filters/MatchFilter.js.map +1 -0
- package/lib/cjs/filters/RateLimitFilter.d.ts +37 -0
- package/lib/cjs/filters/RateLimitFilter.d.ts.map +1 -0
- package/lib/cjs/filters/RateLimitFilter.js +70 -0
- package/lib/cjs/filters/RateLimitFilter.js.map +1 -0
- package/lib/cjs/filters/index.d.ts +4 -0
- package/lib/cjs/filters/index.d.ts.map +1 -0
- package/lib/cjs/filters/index.js +20 -0
- package/lib/cjs/filters/index.js.map +1 -0
- package/lib/cjs/index.browser.d.ts +14 -0
- package/lib/cjs/index.browser.d.ts.map +1 -0
- package/lib/cjs/index.browser.js +46 -0
- package/lib/cjs/index.browser.js.map +1 -0
- package/lib/cjs/index.d.ts +8 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/log.d.ts +60 -1
- package/lib/cjs/log.d.ts.map +1 -1
- package/lib/cjs/log.js +294 -32
- package/lib/cjs/log.js.map +1 -1
- package/lib/cjs/perf/LogMetricSink.d.ts +28 -0
- package/lib/cjs/perf/LogMetricSink.d.ts.map +1 -0
- package/lib/cjs/perf/LogMetricSink.js +120 -0
- package/lib/cjs/perf/LogMetricSink.js.map +1 -0
- package/lib/cjs/perf/measure.d.ts +9 -0
- package/lib/cjs/perf/measure.d.ts.map +1 -0
- package/lib/cjs/perf/measure.js +21 -0
- package/lib/cjs/perf/measure.js.map +1 -0
- package/lib/cjs/perf.d.ts +9 -0
- package/lib/cjs/perf.d.ts.map +1 -0
- package/lib/cjs/perf.js +18 -0
- package/lib/cjs/perf.js.map +1 -0
- package/lib/cjs/schemas/log.configuration.d.ts +151 -18
- package/lib/cjs/schemas/log.configuration.d.ts.map +1 -1
- package/lib/cjs/schemas/log.configuration.js +154 -21
- package/lib/cjs/schemas/log.configuration.js.map +1 -1
- package/lib/cjs/targets/BrowserConsoleTarget.d.ts +48 -0
- package/lib/cjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
- package/lib/cjs/targets/BrowserConsoleTarget.js +48 -0
- package/lib/cjs/targets/BrowserConsoleTarget.js.map +1 -0
- package/lib/cjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
- package/lib/cjs/targets/ColoredConsoleTarget.js +21 -12
- package/lib/cjs/targets/ColoredConsoleTarget.js.map +1 -1
- package/lib/cjs/targets/FileTarget.d.ts +96 -20
- package/lib/cjs/targets/FileTarget.d.ts.map +1 -1
- package/lib/cjs/targets/FileTarget.js +188 -225
- package/lib/cjs/targets/FileTarget.js.map +1 -1
- package/lib/cjs/targets/JsonFileTarget.d.ts +19 -0
- package/lib/cjs/targets/JsonFileTarget.d.ts.map +1 -0
- package/lib/cjs/targets/JsonFileTarget.js +44 -0
- package/lib/cjs/targets/JsonFileTarget.js.map +1 -0
- package/lib/cjs/targets/JsonTarget.d.ts +27 -0
- package/lib/cjs/targets/JsonTarget.d.ts.map +1 -0
- package/lib/cjs/targets/JsonTarget.js +46 -0
- package/lib/cjs/targets/JsonTarget.js.map +1 -0
- package/lib/cjs/targets/MemoryTarget.d.ts +33 -0
- package/lib/cjs/targets/MemoryTarget.d.ts.map +1 -0
- package/lib/cjs/targets/MemoryTarget.js +63 -0
- package/lib/cjs/targets/MemoryTarget.js.map +1 -0
- package/lib/cjs/targets/index.d.ts +7 -0
- package/lib/cjs/targets/index.d.ts.map +1 -1
- package/lib/cjs/targets/index.js +7 -0
- package/lib/cjs/targets/index.js.map +1 -1
- package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.js +48 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.js +94 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.d.ts +44 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.js +61 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.js +52 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
- package/lib/cjs/traceparent.d.ts +63 -0
- package/lib/cjs/traceparent.d.ts.map +1 -0
- package/lib/cjs/traceparent.js +107 -0
- package/lib/cjs/traceparent.js.map +1 -0
- package/lib/mjs/archive/LogArchiveService.d.ts +75 -0
- package/lib/mjs/archive/LogArchiveService.d.ts.map +1 -0
- package/lib/mjs/archive/LogArchiveService.js +186 -0
- package/lib/mjs/archive/LogArchiveService.js.map +1 -0
- package/lib/mjs/archive/archive-strategy.d.ts +32 -0
- package/lib/mjs/archive/archive-strategy.d.ts.map +1 -0
- package/lib/mjs/archive/archive-strategy.js +39 -0
- package/lib/mjs/archive/archive-strategy.js.map +1 -0
- package/lib/mjs/archive/context.d.ts +50 -0
- package/lib/mjs/archive/context.d.ts.map +1 -0
- package/lib/mjs/archive/context.js +2 -0
- package/lib/mjs/archive/context.js.map +1 -0
- package/lib/mjs/archive/index.d.ts +10 -0
- package/lib/mjs/archive/index.d.ts.map +1 -0
- package/lib/mjs/archive/index.js +10 -0
- package/lib/mjs/archive/index.js.map +1 -0
- package/lib/mjs/archive/retention-strategy.d.ts +26 -0
- package/lib/mjs/archive/retention-strategy.d.ts.map +1 -0
- package/lib/mjs/archive/retention-strategy.js +38 -0
- package/lib/mjs/archive/retention-strategy.js.map +1 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js +43 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js +39 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js +49 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js +60 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/util.d.ts +28 -0
- package/lib/mjs/archive/strategies/util.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/util.js +54 -0
- package/lib/mjs/archive/strategies/util.js.map +1 -0
- package/lib/mjs/bootstrap.d.ts.map +1 -1
- package/lib/mjs/bootstrap.js +25 -2
- package/lib/mjs/bootstrap.js.map +1 -1
- package/lib/mjs/callsite.d.ts +26 -0
- package/lib/mjs/callsite.d.ts.map +1 -0
- package/lib/mjs/callsite.js +57 -0
- package/lib/mjs/callsite.js.map +1 -0
- package/lib/mjs/config/log.d.ts +96 -0
- package/lib/mjs/config/log.d.ts.map +1 -0
- package/lib/mjs/config/log.js +72 -0
- package/lib/mjs/config/log.js.map +1 -0
- package/lib/mjs/context.browser.d.ts +46 -0
- package/lib/mjs/context.browser.d.ts.map +1 -0
- package/lib/mjs/context.browser.js +81 -0
- package/lib/mjs/context.browser.js.map +1 -0
- package/lib/mjs/context.d.ts +61 -0
- package/lib/mjs/context.d.ts.map +1 -0
- package/lib/mjs/context.js +88 -0
- package/lib/mjs/context.js.map +1 -0
- package/lib/mjs/filters/LevelFilter.d.ts +24 -0
- package/lib/mjs/filters/LevelFilter.d.ts.map +1 -0
- package/lib/mjs/filters/LevelFilter.js +36 -0
- package/lib/mjs/filters/LevelFilter.js.map +1 -0
- package/lib/mjs/filters/MatchFilter.d.ts +30 -0
- package/lib/mjs/filters/MatchFilter.d.ts.map +1 -0
- package/lib/mjs/filters/MatchFilter.js +62 -0
- package/lib/mjs/filters/MatchFilter.js.map +1 -0
- package/lib/mjs/filters/RateLimitFilter.d.ts +37 -0
- package/lib/mjs/filters/RateLimitFilter.d.ts.map +1 -0
- package/lib/mjs/filters/RateLimitFilter.js +67 -0
- package/lib/mjs/filters/RateLimitFilter.js.map +1 -0
- package/lib/mjs/filters/index.d.ts +4 -0
- package/lib/mjs/filters/index.d.ts.map +1 -0
- package/lib/mjs/filters/index.js +4 -0
- package/lib/mjs/filters/index.js.map +1 -0
- package/lib/mjs/index.browser.d.ts +14 -0
- package/lib/mjs/index.browser.d.ts.map +1 -0
- package/lib/mjs/index.browser.js +30 -0
- package/lib/mjs/index.browser.js.map +1 -0
- package/lib/mjs/index.d.ts +8 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +8 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/log.d.ts +60 -1
- package/lib/mjs/log.d.ts.map +1 -1
- package/lib/mjs/log.js +295 -33
- package/lib/mjs/log.js.map +1 -1
- package/lib/mjs/perf/LogMetricSink.d.ts +28 -0
- package/lib/mjs/perf/LogMetricSink.d.ts.map +1 -0
- package/lib/mjs/perf/LogMetricSink.js +117 -0
- package/lib/mjs/perf/LogMetricSink.js.map +1 -0
- package/lib/mjs/perf/measure.d.ts +9 -0
- package/lib/mjs/perf/measure.d.ts.map +1 -0
- package/lib/mjs/perf/measure.js +18 -0
- package/lib/mjs/perf/measure.js.map +1 -0
- package/lib/mjs/perf.d.ts +9 -0
- package/lib/mjs/perf.d.ts.map +1 -0
- package/lib/mjs/perf.js +15 -0
- package/lib/mjs/perf.js.map +1 -0
- package/lib/mjs/schemas/log.configuration.d.ts +151 -18
- package/lib/mjs/schemas/log.configuration.d.ts.map +1 -1
- package/lib/mjs/schemas/log.configuration.js +154 -21
- package/lib/mjs/schemas/log.configuration.js.map +1 -1
- package/lib/mjs/targets/BrowserConsoleTarget.d.ts +48 -0
- package/lib/mjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
- package/lib/mjs/targets/BrowserConsoleTarget.js +45 -0
- package/lib/mjs/targets/BrowserConsoleTarget.js.map +1 -0
- package/lib/mjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
- package/lib/mjs/targets/ColoredConsoleTarget.js +21 -9
- package/lib/mjs/targets/ColoredConsoleTarget.js.map +1 -1
- package/lib/mjs/targets/FileTarget.d.ts +96 -20
- package/lib/mjs/targets/FileTarget.d.ts.map +1 -1
- package/lib/mjs/targets/FileTarget.js +191 -192
- package/lib/mjs/targets/FileTarget.js.map +1 -1
- package/lib/mjs/targets/JsonFileTarget.d.ts +19 -0
- package/lib/mjs/targets/JsonFileTarget.d.ts.map +1 -0
- package/lib/mjs/targets/JsonFileTarget.js +41 -0
- package/lib/mjs/targets/JsonFileTarget.js.map +1 -0
- package/lib/mjs/targets/JsonTarget.d.ts +27 -0
- package/lib/mjs/targets/JsonTarget.d.ts.map +1 -0
- package/lib/mjs/targets/JsonTarget.js +43 -0
- package/lib/mjs/targets/JsonTarget.js.map +1 -0
- package/lib/mjs/targets/MemoryTarget.d.ts +33 -0
- package/lib/mjs/targets/MemoryTarget.d.ts.map +1 -0
- package/lib/mjs/targets/MemoryTarget.js +60 -0
- package/lib/mjs/targets/MemoryTarget.js.map +1 -0
- package/lib/mjs/targets/index.d.ts +7 -0
- package/lib/mjs/targets/index.d.ts.map +1 -1
- package/lib/mjs/targets/index.js +7 -0
- package/lib/mjs/targets/index.js.map +1 -1
- package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.js +45 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.js +91 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.d.ts +44 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.js +58 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.js +49 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
- package/lib/mjs/traceparent.d.ts +63 -0
- package/lib/mjs/traceparent.d.ts.map +1 -0
- package/lib/mjs/traceparent.js +100 -0
- package/lib/mjs/traceparent.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- 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 @@
|
|
|
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"}
|