aboutsummaryrefslogtreecommitdiff
path: root/services/docker/mail-server/aws-sendmail/logger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/logger.ts')
-rw-r--r--services/docker/mail-server/aws-sendmail/logger.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/services/docker/mail-server/aws-sendmail/logger.ts b/services/docker/mail-server/aws-sendmail/logger.ts
new file mode 100644
index 0000000..160d70a
--- /dev/null
+++ b/services/docker/mail-server/aws-sendmail/logger.ts
@@ -0,0 +1,50 @@
+import * as path from "@std/path";
+
+import { createSingleton, generateTimeStringForFileName } from "./util.ts";
+
+export class Logger {
+ constructor(public readonly path: string) {}
+
+ warn(message: string) {
+ console.log(message);
+ }
+
+ generateLogFilePath(
+ prefix: string = "",
+ suffix: string = "",
+ instant?: Temporal.Instant | Date,
+ ): string {
+ return path.join(
+ this.path,
+ `${prefix}-${generateTimeStringForFileName(instant)}-${suffix}`,
+ );
+ }
+
+ openLogFile(
+ prefix: string = "",
+ suffix: string = "",
+ instant?: Temporal.Instant | Date,
+ ): Promise<Deno.FsFile> {
+ const logPath = this.generateLogFilePath(prefix, suffix, instant);
+ return Deno.open(logPath, {
+ read: false,
+ write: true,
+ append: true,
+ create: true,
+ });
+ }
+
+ async logProgramOutput(
+ process: Deno.ChildProcess,
+ program: string,
+ instant?: Temporal.Instant | Date,
+ ): Promise<void> {
+ const stdoutFile = await this.openLogFile(program, "stdout", instant);
+ const stderrFile = await this.openLogFile(program, "stderr", instant);
+
+ process.stdout.pipeTo(stdoutFile.writable);
+ process.stderr.pipeTo(stderrFile.writable);
+ }
+}
+
+export const [getLogger, setLogger] = createSingleton<Logger>("Logger");